web-dev-qa-db-ja.com

テキストファイルの2行ごとにBashとペアリングするにはどうすればよいですか?

単純な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

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

シェルのみの代替手段は次のとおりです。

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

私はこのソリューションのシンプルさが大好きです

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'

入力ファイルにタイムスタンプのような3行目がある場合

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
29
rob