天天看点

将多行文件转换为一行

一、需求:

把这些数据库文件转换成一行,然后用scp -r 一次性作拷贝。

二、实例

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

<code>[root@mysql5 ~]</code><code># cat /tmp/1</code>

<code>ga_10122</code>

<code>ga_10589</code>

<code>ga_11053</code>

<code>ga_11238</code>

<code>ga_11559</code>

<code>ga_11944</code>

<code>ga_12193</code>

<code>ga_13542</code>

<code>ga_35179</code>

<code>ga_36013</code>

<code>ga_36063</code>

<code>ga_36575</code>

<code>ga_36737</code>

<code>ga_36926</code>

<code>ga_37962</code>

<code>ga_39596</code>

<code>ga_39599</code>

<code>ga_39603</code>

<code>ga_39604</code>

<code>ga_39605</code>

<code>ga_39608</code>

<code>ga_39609</code>

<code>ga_39610</code>

<code>ga_39614</code>

<code>ga_39618</code>

<code>ga_39619</code>

<code>ga_39622</code>

<code>ga_39625</code>

<code>ga_39626</code>

<code>ga_39630</code>

<code>ga_39633</code>

<code>ga_39636</code>

<code>ga_39639</code>

<code>ga_39640</code>

<code>ga_39642</code>

<code>ga_39645</code>

<code>ga_39648</code>

<code>ga_39652</code>

<code>ga_39654</code>

<code>ga_39657</code>

<code>ga_39668</code>

<code>ga_39675</code>

<code>ga_39687</code>

<code>ga_39690</code>

<code>ga_39691</code>

<code>ga_39693</code>

<code>ga_39695</code>

<code>ga_39697</code>

<code>ga_39702</code>

<code>ga_39703</code>

<code>ga_39704</code>

<code>ga_39708</code>

<code>ga_39715</code>

<code>ga_39717</code>

<code>ga_39724</code>

<code>ga_39725</code>

<code>ga_39727</code>

<code>ga_39728</code>

<code>ga_39730</code>

<code>ga_39732</code>

<code>ga_39738</code>

<code>ga_39741</code>

<code>ga_39743</code>

<code>ga_39753</code>

<code>ga_39757</code>

<code>ga_39761</code>

<code>ga_39765</code>

三、解决有三种

1、采用awk

<code>[root@mysql5 ~]</code><code># awk BEGIN{RS=EOF}'{gsub(/\n/," ");print}' /tmp/1</code>

<code>ga_10122 ga_10589 ga_11053 ga_11238 ga_11559 ga_11944 ga_12193 ga_13542 ga_35179 ga_36013 ga_36063 ga_36575 ga_36737 ga_36926 ga_37962 ga_39596 ga_39599 ga_39603 ga_39604 ga_39605 ga_39608 ga_39609 ga_39610 ga_39614 ga_39618 ga_39619 ga_39622 ga_39625 ga_39626 ga_39630 ga_39633 ga_39636 ga_39639 ga_39640 ga_39642 ga_39645 ga_39648 ga_39652 ga_39654 ga_39657 ga_39668 ga_39675 ga_39687 ga_39690 ga_39691 ga_39693 ga_39695 ga_39697 ga_39702 ga_39703 ga_39704 ga_39708 ga_39715 ga_39717 ga_39724 ga_39725 ga_39727 ga_39728 ga_39730 ga_39732 ga_39738 ga_39741 ga_39743 ga_39753 ga_39757 ga_39761 ga_39765</code>

awk默认将记录分隔符(record separator即RS)设置为\n,此行代码将RS设置为EOF(文件结束),也就是把文件视为一个记录,然后通过gsub函数将\n替换成空格,最后输出。

2、采用sed

<code>[root@mysql5 ~]</code><code># sed ':a ; N;s/\n/ / ; t a ; ' /tmp/1</code>

说明:sed默认只按行处理,N可以让其读入下一行,再对\n进行替换,这样就可以将两行并做一行。但是怎么将所有行并作一行呢?可以采用sed的跳转功能。:a 在代码开始处设置一个标记a,在代码执行到结尾处时利用跳转命令t a重新跳转到标号a处,重新执行代码,这样就可以递归的将所有行合并成一行。

3、cat file | xargs

<code>[root@mysql5 ~]</code><code># cat /tmp/1 | xargs</code>

本文转自 zouqingyun 51CTO博客,原文链接:http://blog.51cto.com/zouqingyun/1877308,如需转载请自行联系原作者