我想在 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