问题
With a simple bash script I generate a text file with many lines like this:
192.168.1.1
hostname1
192.168.1.2
hostname2
192.168.1.3
hostname3
Now I want to reformat this file so it looks like this:
192.168.1.1 hostname1
192.168.1.2 hostname2
192.168.1.3 hostname3
How would I reformat it this way? Perhaps sed?
回答1:
$ sed '$!N;s/\n/ /' infile
192.168.1.1 hostname1
192.168.1.2 hostname2
192.168.1.3 hostname3
回答2:
Here's a shell-only alternative:
while read first; do read second; echo "$first $second"; done
回答3:
I love the simplicity of this solution
cat infile | paste -sd ' \n'
192.168.1.1 hostname1
192.168.1.2 hostname2
192.168.1.3 hostname3
or make it comma separated instead of space separated
cat infile | paste -sd ',\n'
and if your input file had a third line like timestamp
192.168.1.1
hostname1
14423289909
192.168.1.2
hostname2
14423289910
192.168.1.3
hostname3
14423289911
then the only change is to add another space in to the delimiter list
cat infile | paste -sd ' \n'
192.168.1.1 hostname1 14423289909
192.168.1.2 hostname2 14423289910
192.168.1.3 hostname3 14423289911
来源:https://stackoverflow.com/questions/1513861/how-do-i-pair-every-two-lines-of-a-text-file-with-bash