行数が異なる2つのtxtファイルをインターリーブする方法

行数が異なる2つのtxtファイルをインターリーブする方法

ファイル1.txt:

1
2
3
4
5
6

ファイル2.txt:

A
B
C
D
E

希望の出力比は3:1(file3.txt)です。

1
2
3
A
4
5
6
B

私が試したコマンド:

  1. sed Rfile2.txt file1.txt >file3.txt
  2. paste -d '\n' file1.txt file2.txt >file3.txt

ベストアンサー1

そしてpaste

paste -d '\n' <file1.txt - - - file2.txt

ファイルの 1 つが使い果たされた後でも、他のファイルにまだ行が残っている場合 (例に示すように) 行を出力し続けます。

そしてawk

awk '{print}; NR % 3 == 0 {getline < "file2.txt"; print}' file1.txt

またはGNUにsed対応するもの:

sed '3~3 R file2.txt' file1.txt

今回は使い果たされると停止しますが、使い果たされた場合はfile1.txt続きます(そして、バリアントでは空行を出力し、GNUバリアントでは何も出力しません)。file2.txtawksed

ファイルがすべて使い果たされたら停止します。

awk '{print}
     NR % 3 == 0 {
       if ((getline < "file2.txt") <= 0) exit
       print
     }' file1.txt

おすすめ記事