Linux 将一些行分组为一行

Linux 将一些行分组为一行,linux,lines,hosts,Linux,Lines,Hosts,我有一个应用程序,我需要使用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+行,因此我的目标是使用尽可能少的资

我有一个应用程序,我需要使用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,我可以得到一组行,但我不知道如何将它们放在一行上(带有空格的子站点\n似乎不起作用)。

这样如何:

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

这里有一个
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

您是否总是希望每行有三个名称(最后一行除外)?我认为每行有20个(或30个)名称可以减少文件大小而不会出现问题;最后一行将包含剩余的名称(不一定是一个),我怀疑管道中不需要
tr
命令。
fmt
不会根据需要合并行吗?谢谢,它就像一个符咒:)我将-w25改为-w100,因为有些名字很长;我会尽快直接在路由器上测试它。