【发布时间】:2019-06-14 12:23:11
【问题描述】:
我有两个 csv 文件 file1.csv 和 file2.csv。file1.csv 包含 4 列。
文件1:
Header1,Header2,Header3,Header4
aaaaaaa,bbbbbbb,ccccccc,ddddddd
eeeeeee,fffffff,ggggggg,hhhhhhh
iiiiiii,jjjjjjj,kkkkkkk,lllllll
mmmmmmm,nnnnnnn,ooooooo,ppppppp
文件2:
"Header1","Header2","Header3"
"aaaaaaa","cat","dog"
"iiiiiii","doctor","engineer"
"mmmmmmm","sky","blue"
所以我要做的是逐行读取file1.csv,将每个条目放入一个数组中,然后将该数组的第一个元素与file2.csv 的第一列进行比较,如果存在匹配项,则替换 column1 和file1.csv 的 column2 与 file2.csv 的对应列
所以我想要的输出是:
cat,dog,ccccccc,ddddddd
eeeeeee,fffffff,ggggggg,hhhhhhh
doctor,engineer,kkkkkkk,lllllll
sky,blue,ooooooo,ppppppp
当只有要替换的列时,我可以做到这一点。
这是我的代码:
awk -F'"(,")?' '
NR==FNR { r[$2] = $3; next }
{ for (n in r) gsub(n,r[n]) } IGNORECASE=1' file2.csv file1.csv>output.csv
我的最后一步是将整个数组转储到一个包含 10 列的文件中。 有什么建议可以改进或更正我的代码吗?
【问题讨论】:
-
通过查看您的个人资料了解到,从最后几个问题中您没有选择任何答案作为正确答案,因此请您这样做(在您发布后的某个时间之后)并且当您看到足够的答案时您的帖子您可以选择其中任何一个答案作为正确答案@Anuj Kulkarni
-
@Tiw 是的,我的 file2.csv 可能有引号。我自己创建 file2.csv,而 file1.csv 是工具生成的文件。因此,在创建 file2.csv 时,我使用了引号。
-
@Tiw 是的,这是正确的。不会有逗号。我使用引号是因为 file2 可能有两个以上的空格分隔的单词(比如一个句子)。
-
@AnujKulkarni。始终建议发布靠近 Input_file(s) 的示例,请编辑您的帖子并让我们知道。
-
Anul 如果您的输入是逗号分隔的,那么空格或制表符就像任何其他字符一样,您不需要在字段周围加上引号,除非它们包含逗号或换行符。它们可以包含换行符吗?