使用 awk 将一个文件中的列替换为另一个文件中的列?
我有两个文件:
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”中的第三列?
I have two files:
f1:
111 aaa 444
222 bbb 555
333 ccc 666
f2:
111 333 000 444
222 444 111 555
333 555 555 666
How can I replace second column in "f1", with third column from "f2" using awk?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
尝试:
输出:
上述代码的说明:
FNR==NR
允许您处理整个文件一次。在本例中,它是文件f2
。NR
和FNR
都包含行号,区别在于,当读取新文件时,FNR
会重置为 1,其中NR< /code> 继续递增。
f2
文件时,我们正在创建一个名为a
的数组,使用行号 (NR
) 作为key 和第三列 (
$3
) 作为值。next
允许我们跳过操作块的其余部分。f2
文件结束,我们就开始处理f1
文件。NR==FNR
条件不会变为 false,因为FNR
将从 1 开始递增,而NR
不会。因此,只有第二个操作块{$2=a[FNR]}
将被处理。1
打印该行。它返回 true,并且在awk
true 语句中会打印该行。f2 f1
是定义的文件顺序。因为我们想从文件f2
创建一个数组,所以我们把它放在第一位。try:
Output:
Explanation of the above code:
FNR==NR
allows you to work with one entire file at a time. In this case it is the filef2
.NR
andFNR
both contain line numbers with the difference beingFNR
gets reset to 1 when a new file is read where asNR
continues to increment.f2
file, we are creating an array calleda
using line number (NR
) as thekey
and third column ($3
) as the value.next
allows us to skip the rest of the action block.f2
file ends, we start to work onf1
file.NR==FNR
condition will not become false asFNR
will increment from 1 andNR
won't. So only second action block{$2=a[FNR]}
will be worked upon.1
at the end prints the line. It returns true, and inawk
true statements results in printing of the line.f2 f1
is the order of files defined. Since we want to create an array from filef2
we put that first.