如何使用bash的文本文件的每两行配对? [重复](How do I pair every tw

2019-08-17 05:34发布

这个问题已经在这里有一个答案:

  • 如何每两行合并成一个命令行? 20个回答

用一个简单的bash脚本,我产生了许多线条像这样的文本文件:

192.168.1.1
hostname1
192.168.1.2
hostname2
192.168.1.3
hostname3

现在我要重新格式化这个文件,所以它看起来是这样的:

192.168.1.1 hostname1
192.168.1.2 hostname2
192.168.1.3 hostname3

我将如何重新格式化这种方式? 也许sed

Answer 1:

$ sed '$!N;s/\n/ /' infile
192.168.1.1 hostname1
192.168.1.2 hostname2
192.168.1.3 hostname3


Answer 2:

这里有一个唯一的壳选择:

while read first; do read second; echo "$first $second"; done


Answer 3:

我喜欢这个解决方案的简单

cat infile | paste -sd ' \n'

192.168.1.1 hostname1
192.168.1.2 hostname2
192.168.1.3 hostname3

或使其逗号分隔,而不是用空格分开

cat infile | paste -sd ',\n'

如果你的输入文件有一个三线像时间戳

192.168.1.1
hostname1
14423289909
192.168.1.2
hostname2
14423289910
192.168.1.3
hostname3
14423289911

那么,唯一的变化是在添加另一个空间的分隔符列表

cat infile | paste -sd '  \n'

192.168.1.1 hostname1 14423289909
192.168.1.2 hostname2 14423289910
192.168.1.3 hostname3 14423289911


文章来源: How do I pair every two lines of a text file with Bash? [duplicate]