0

我有一个CSV包含键/值的基础。前两列是键,第三列是值。

示例文件 1:

12389472,1,136-7402
23247984,1,136-7402
23247984,2,136-7402
34578897,1,136-7402

在另一个文件中,我有一个需要在第一个文件中更改其值的键列表。我正在尝试将值更改为136-7425

示例文件 2:

23247984,1
23247984,2

这是我目前正在做的事情:

/usr/xpg4/bin/awk '{FS=",";OFS=","}NR==FNR{a[$1,$2]="136-7425";next}{$3=a[$1,$2]}1' file2 file1 > output

哪个有效,但是对于在file2. 我只想更改 中存在的键的值file2,并保留未找到键的当前值。

谁能指出我做错了什么?或者也许有一种更简单的方法来实现这一点。

谢谢!

4

2 回答 2

4

这条线应该适合你:

awk -F, -v OFS="," 'NR==FNR{a[$1,$2]=1;next}a[$1,$2]{$3="136-7425"}7' file2 file1
于 2013-10-10T20:58:58.367 回答
4

看起来您只是在为第一个文件中不存在的键切换第三个字段。尝试这个:

awk '{FS=OFS=","}NR==FNR{a[$1,$2]="136-7425";next} ($1,$2) in a{$3=a[$1,$2]} 1' file2 file1 > output

或(见下面的评论):

awk '{FS=OFS=","}NR==FNR{seen[$1,$2]++;next} seen[$1,$2]{$3="136-7425"} 1' file2 file1 > output

仅供参考,一个名为的数组seen[]也类似且通常用于从输入中删除重复项,例如:

awk '!seen[$0]++' file
于 2013-10-10T20:38:17.643 回答