使用 awk 将一个文件中的列替换为另一个文件中的列?

使用 awk 将一个文件中的列替换为另一个文件中的列?

我有两个文件:

文件1.txt:

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

文件2.txt:

111
(null)
333 

将 file1 的第二列替换为 file2 的第一列

预期输出

新的:

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

我失去了第二个记录。如何避免记录丢失?

答案1

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

答案2

或者,您可以使用pasteandcut为此:

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

不过,我无法判断哪个在速度方面更好。

相关内容