附: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个命令是同样的,只是把简单问题复杂化了。