awk 或 bash 从 CSV 读取 ID,匹配第二个 CSV 中的行,更改第二列中的值

awk 或 bash 从 CSV 读取 ID,匹配第二个 CSV 中的行,更改第二列中的值

我有两个 .csv

items-to-change.txt 是唯一 ID 的单列列表:

218294
222084
197931
198161
197432
201021
214009

items-by-location.txt 具有唯一的 ID 和位置编号(制表符分隔)

ID  Location
197432  1
201021  2
214009  4
214438  5
214492  1
...

对于与 items-to-change.txt 中的 ID 匹配的任何 ID,我需要将 items-by-location.txt 中的位置字段更改为 6,然后据此创建一个新的 .csv,例如 items-by-location2 。TXT

items-by-location2.txt 应该是:

197432  6
201021  6
214009  6
214438  5
214492  1
...

awk 是一个很好的解决方案吗?我知道 awk 有一个搜索参数,但不清楚如何使用 awk 读取 items-to-change.txt 获取 ID,然后逐行读取 items-by-location.txt,比较 ids 和如果第一列中有匹配的 ID,则只有 items-by-location.txt 的第二列。

有人可以举个例子吗?

答案1

将更改列表添加到数组中,然后在处理主输入文件时检查该数组非常适合awk

$ awk 'FILENAME=="changeset" { replace[$1] = 1 } FILENAME=="input" {if( $1 in replace ) { $2 = 6 }; print $1,$2}' changeset input
ID Location
197432 6
201021 6
214009 6
214438 5
214492 1

相关内容