天天看點

将多行檔案轉換為一行

一、需求:

把這些資料庫檔案轉換成一行,然後用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,如需轉載請自行聯系原作者