附:sed的合併行的方法
處理前:
114.113.144.2:
19ms
19ms
19ms
36ms
22ms
19ms
18ms
218.61.204.73:
0ms
0ms
0ms
0ms
0ms
0ms
0ms
處理後:
114.113.144.2: 19ms 19ms 19ms 36ms 22ms 19ms 18ms
218.61.204.73: 0ms 0ms 0ms 0ms 0ms 0ms 0ms
解決方法(稍有改動):
1.
awk 'NR>1&&!/ms/{print ""}{printf $0" "}END{print ""}' file
解釋:行號大於1且沒有匹配到ms就換行,把每一行都打印出來,用空格隔開,最後,換行。
2.
sed ':a;$!N;/ms$/s/\n/ /;ta;P;D' file
解釋:設置一個標籤a,除了最後一行,其餘行都執行把下一行的數據添加到模式空間,當匹配到以ms結尾的行就把換行符換成空格,若是替換成功,就重複執行a不然就將模式空間的第一行打印出來,而後刪除模式空間的第一行,開始下一個循環。
重點解釋一下P和D:
P:打印模式空間的第一行。
D:刪除模式空間的第一行,開始一個新的循環。
這個命令第一次打印前的模式空間的內容是:
114.113.144.2: 19ms 19ms 19ms 36ms 22ms 19ms 18ms
218.61.204.73:
經過P命令,sed就會把第一行打印出來,而後再經過D命令,把第一行刪掉,而後第二行就變成第一行了。此時模式空間的內容就是:
218.61.204.73:
3.
cat file | xargs -n8
4.
paste -sd ' \n' file
-s:將一個文件的數據每次都水平地輸出。
-d ' \n':將默認分隔符Tab換成7個空格和1個換行符,即前8個數據用空格隔開,而後換行。
5.
sed -e :a -e '$!N;/\n.*ms/{s/\n/ /;ta};P;D' file
解釋:我不知道寫這命令的人爲何要用-e,其實直接用
sed ':a;$!N;/\n.*ms/s/\n/ /;ta;P;D' file不是更好?這個命令跟第2個命令是同樣。
6.
sed -n '/^.*[.]/{:m;N;/\n.*[.]/!{s/\n/ /;bm};P} file
解釋:這個命令的運行結果是:
114.113.144.2: 19ms 19ms 19ms 36ms 22ms 19ms 18ms
只有一行,因此確定有問題,經我改過以後是這樣的:sed '/^.*[.]/{:m;N;/\n.*[.]/!{s/\n/ /;bm};P;D} file,方法跟第2個命令是同樣的,只是把簡單問題複雜化了。