![使用 AWK 根据另一个文件中的值更新一个文件](https://linux22.com/image/158093/%E4%BD%BF%E7%94%A8%20AWK%20%E6%A0%B9%E6%8D%AE%E5%8F%A6%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E5%80%BC%E6%9B%B4%E6%96%B0%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6.png)
我有两个文件 file1.csv (20 列 410k 行)和 data.csv (4 列 1800 行)。我想做的是,如果 data.csv 第一列与 file1.csv 第二列匹配,则用 data.csv 第三列中的值覆盖 file1.csv 中的第一列。如果没有匹配保留现有值...
此命令将列出匹配的行,但无法正确获取替换部分。
awk -F"," 'BEGIN{OFS=","} {if (NR==FNR) {a[$1]=$3; next} if ($2 in a) print}' data.csv file1.csv
> file3.csv
谢谢!
答案1
如果我理解正确的话,你想要:
awk -F"," 'BEGIN{OFS=","}
{
if (NR==FNR) {
a[$1]=$3;
next
}
if ($2 in a){
$1=a[$2]
}
print
}' data.csv file1.csv
你就快到了。您只需设置$1
为从第一个文件中保存的任何内容,然后打印该行。