如何使用另一个两列 csv 表交换 csv 文件中的匹配模式

如何使用另一个两列 csv 表交换 csv 文件中的匹配模式

我想在 csv2(任何地方)中找到 csv1(第 1 列)中的模式,并将它们与 csv1(第 2 列)中的模式交换。

就像下面这样:

-csv1-

第1列 列2
AA 电子数据中心
BB ysc
抄送 光盘
DD 尔格

...ETC

-csv2-

第1列 列2 第3栏 ...等等(更多列)
BB 千焦 瓦阿 PDS
xsd tkp 埃特普 AA
xrg AA DD 抄送
格格 雷科 BLB DD
tpp 易于 抄送 万维网

解决方案类似于这篇文章......如何比较两个不同 csv 文件中的列并替换另一个文件中的列

建议:

$ awk '
    BEGIN { FS=OFS="," }
    NR==FNR { map[$1] = $2; next }
    (FNR>1) && ($4 in map) { $4 = map[$4] }
1' file2 file1

这个对我有用。我只需要指定搜索所有列,而不仅仅是第四列。

答案1

要签入所有列而不是单个列,您需要循环所有列并检查每个列是否进行替换。

awk '
BEGIN { FS=OFS="," }
NR==FNR { map[$1] = $2; next }
FNR>1{
       for (i=1; i<=NF; i++) $i = ($i in map?map[$i]:$i)
}1' csv1 csv2

相关内容