ファイル1:
.tid.setnr := 1123
.tid.setnr := 3345
.tid.setnr := 5431
.tid.setnr := 89323
ファイル2:
.tid.info := 12
.tid.info := 3
.tid.info := 44
.tid.info := 60
出力ファイル:
.tid.info := 12
.tid.setnr := 1123
.tid.info := 3
.tid.setnr := 3345
.tid.info := 44
.tid.setnr := 5431
.tid.info := 60
.tid.setnr := 89323
paste
を使用:
paste -d \\n file2 file1
別のawkソリューション:
awk '{print; getline < "file1"; print}' file2
paste
solution は、最も移植性が高く、最も効率的です。 2つのファイルの行数が同じでない場合の動作を好む場合にのみ、この代替案について言及します。
GNU sed
:
sed Rfile1 file2
file1
の行数がfile2
より少ない場合、file1
を使い果たすと、sed
は何も出力しません(paste
の空の行とは対照的です)。
file1
にfile2
より多くの行がある場合、それらの余分な行は破棄されます(file2
にpaste
を指定して空の行を出力するのではなく)。
$ paste a b
1 a
2 b
3
4
$ paste -d \\n a b
1
a
2
b
3
4
$ sed Rb a
1
a
2
b
3
4
$ sed Ra b
a
1
b
2
awk
(gawk
、nawk
、mawk
)を使用:
awk 'NR==FNR {x[FNR]=$0;next} {print x[FNR]"\n"$0}' file2 file1 > outputfile
NR==FNR {x[FNR]=$0;next}
:NR==FNR
は、現在のレコード番号が現在のファイルレコード番号と等しい場合にのみ一致します(したがって、最初のファイルの処理中にのみ一致します):現在処理されているレコードを配列x
に等しいインデックスで格納します現在のファイルレコード番号と現在のレコードをスキップ{print x[FNR]"\n"$0}
:配列x
の内容を、現在のファイルレコード番号とそれに続く改行と現在のレコードの内容に等しいインデックスで出力します~/tmp$ cat file1
.tid.setnr := 1123
.tid.setnr := 3345
.tid.setnr := 5431
.tid.setnr := 89323
~/tmp$ cat file2
.tid.info := 12
.tid.info := 3
.tid.info := 44
.tid.info := 60
~/tmp$ awk 'NR==FNR {x[FNR]=$0;next} {print x[FNR]"\n"$0}' file2 file1
.tid.info := 12
.tid.setnr := 1123
.tid.info := 3
.tid.setnr := 3345
.tid.info := 44
.tid.setnr := 5431
.tid.info := 60
.tid.setnr := 89323