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

发布于 2024-12-11 01:53:45 字数 174 浏览 0 评论 0原文

我有两个文件:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

话少心凉 2024-12-18 01:53:45

尝试:

awk 'FNR==NR{a[NR]=$3;next}{$2=a[FNR]}1' f2 f1

输出:

111 000 444
222 111 555
333 555 666

上述代码的说明:

  • FNR==NR 允许您处理整个文件一次。在本例中,它是文件f2NRFNR 都包含行号,区别在于,当读取新文件时,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:

awk 'FNR==NR{a[NR]=$3;next}{$2=a[FNR]}1' f2 f1

Output:

111 000 444
222 111 555
333 555 666

Explanation of the above code:

  • FNR==NR allows you to work with one entire file at a time. In this case it is the file f2. NR and FNR both contain line numbers with the difference being FNR gets reset to 1 when a new file is read where as NR continues to increment.
  • While we are working with f2 file, we are creating an array called a using line number (NR) as the key and third column ($3) as the value. next allows us to skip the rest of the action block.
  • Once f2 file ends, we start to work on f1 file. NR==FNR condition will not become false as FNR will increment from 1 and NR won't. So only second action block {$2=a[FNR]} will be worked upon.
  • What this block does is it re-assigns second column value to array value by looking up the line number.
  • 1 at the end prints the line. It returns true, and in awk true statements results in printing of the line.
  • f2 f1 is the order of files defined. Since we want to create an array from file f2 we put that first.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文