shell中多行變一行的方法

文本內容:
$cat test.txt
001
002
003
004
005
006
0000999
需要格式化成:
001 002 003 004 005 006 0000999
方法一、最好的答案是waker老大提供的,就不解釋了:
xargs < test.txt
方法二、整個文件讀入一個變量,然後直接打印,也很容易理解,dolphinlater提供:
a=`cat test.txt`;echo $a

方法三、使用tr把換行符替換成空格:
tr -s "\n" " " < test.txt;echo
方法四、使用sed,把整個文件讀入保持空間,處理最後一行的時候,替換所有換行符爲空格,打印:
sed -n '1h;1!H;${g;s/\n/ /g;p;}' test.txt
方法五、使用awk,讀入一行打印一行,但是不打印換行符,最後一行多打印一個換行符:
awk '{printf("%s ",$0);}END{print}' test.txt
方法六、使用paste命令格式化打印,-d指定分隔符,-s表示合併成一行:
paste -d" " -s - < test.txt
方法七、使用pr格式化打印,-s指定分隔符,-50指定每行打印多少域,-t指定取消頁眉、頁尾:

pr -50t -s" " test.txt

方法八:通過sed的模式空間和暫存時間來處理

1、seq 4|sed ':lable;N;s/\n//g;t lable'   (N:讀入下一行追加到模式空間後面,此時模式空間等於有兩行,lable 通過標籤來實現想程序裏的do while 循環一樣)

2、seq 4|sed -n 'H;${x;s/\n//g;p}'    (H表示將pattern space的內容追加到hold space中。一直追加到文件最後一行。關鍵在於H在追加的時候,會自動換行,$表示在最後一樣執行x;s/\n//g;p ,x表示將模式空間的內容和暫存空間的內容呼喚)

3、seq 4|sed -n 'H;g;${s/\n//g;p}' (第一個g表示把暫存空間的內容替換到模式空間,第二個g是全局替換的意思)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章