将一些行分组为一个

时间:2014-12-03 20:23:52

标签: linux lines hosts

我有一个 hosts file ,我需要使用Linux标准命令将多行组合成一行;从这开始:

127.0.0.1 name1
127.0.0.1 name2
127.0.0.1 name3
...
127.0.0.1 nameN

我想要这个:

127.0.0.1 name1 name2 name3
127.0.0.1 name4 name5 name6
...
127.0.0.1 ... nameN

IP地址始终相同,我可以轻松删除它以简化工作;该文件可以达到30K +行,所以我的目标是使用尽可能少的资源减少其大小(我在使用OpenWRT的路由器上工作)。 使用 tail head 我可以获得一组行,但后来我不知道如何将它们放在一行(substite \ n带有空格的似乎不起作用。)

2 个答案:

答案 0 :(得分:1)

这个怎么样:

(sed 's/127.0.0.1 //' | fmt -w 25 | sed 's/^/127.0.0.1 /') < inputfile > outputfile

答案 1 :(得分:1)

这是一个sed调用,在一行中总是最多有三个名字:

sed -e '1~3 N' -e 's/\n127.0.0.1//g' -e '2~3 N' -e 's/\n127.0.0.1//g' in >out

这适用于GNU sed,我还没有尝试过任何其他sed版本:

voss@seehuhn [~] cat x
127.0.0.1 a
127.0.0.1 b
127.0.0.1 c
127.0.0.1 d
127.0.0.1 e
127.0.0.1 f
127.0.0.1 g
127.0.0.1 h
voss@seehuhn [~] sed -e '1~3 N' -e 's/\n127.0.0.1//g' -e '2~3 N' -e 's/\n127.0.0.1//g' x
127.0.0.1 a b c
127.0.0.1 d e f
127.0.0.1 g h