awkを使用してあるファイルの列を別のファイルの列に置き換えますか?

awkを使用してあるファイルの列を別のファイルの列に置き換えますか?

2つのファイルがあります。

ファイル1.txt:

111|aaa|444
222|bbb|555 
333|ccc|666

ファイル2.txt:

111
(null)
333 

file1 の 2 番目の列を file2 の 1 番目の列に置き換えます。

期待される出力

新しい:

111|111|444
222||555
333|333|666

次のコマンドを使用しています。
awk 'BEGIN {FS=OFS="|"}NR == FNR {a[FNR] = $B;next}$A = a[FNR]' B=1 A=2 file2.txt file1.txt > new.txt

私が得た結果は

新しい:

111|111|444
333|333|666

2回目の記録を失いました。記録損失を防ぐ方法は?

答え1

awk 'BEGIN {FS=OFS="|"}NR == FNR {a[FNR] = $B;next}{$A = a[FNR];print $0}' B=1 A=2 f2 f1

答え2

pasteまたは、次のためにandを使用できますcut

paste -d'|' <(cut -d'|' -f1 file1) <(cat file2) <(cut -d'|' -f3 file2)

しかし、速度の観点からどちらが良いと言うことはできません。

関連情報