我有两个文件:
f1:
111 aaa 444
222 bbb 555
333 ccc 666
f2:
111 333 000 444
222 444 111 555
333 555 555 666
如何使用awk替换“f1”中的第二列,使用“f2”中的第三列?
答案 0 :(得分:27)
<强>尝试:强>
awk 'FNR==NR{a[NR]=$3;next}{$2=a[FNR]}1' f2 f1
<强>输出:强>
111 000 444
222 111 555
333 555 666
上述代码的说明:
FNR==NR
允许您一次处理一个完整的文件。在这种情况下,它是文件f2
。 NR
和FNR
都包含行号,当读取新文件时,FNR
的差异将重置为1,NR
继续递增。 f2
文件时,我们正在创建一个名为a
的数组,使用行号(NR
)作为key
和第三列({{1} }}作为值。 $3
允许我们跳过动作块的其余部分。 next
文件结束后,我们开始处理f2
文件。 f1
条件不会变为错误,因为NR==FNR
将从1开始递增,而FNR
则不会。因此,只有第二个动作块NR
将被处理。 {$2=a[FNR]}
打印出该行。它返回true,并且在1
真实语句中导致行的打印。 awk
是定义文件的顺序。由于我们想要从文件f2 f1
创建一个数组,我们先把它放在第一位。