gpt4 book ai didi

csv - 如何将 csv 文件读入数组并与另一个 csv 文件中的条目进行比较和替换?

转载 作者:行者123 更新时间:2023-12-03 03:39:38 27 4
gpt4 key购买 nike

我有两个 csv 文件 file1.csvfile2.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的第一列进行比较 如果存在匹配项,则将 file1.csv 的 column1 和 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 列的文件中。有什么建议可以改进或更正我的代码吗?

最佳答案

编辑:考虑到您的Input_file2的日期为“ytest”,“test2”等格式,如果是,则尝试以下操作。(感谢Tiw在他/她的帖子中提供此示例)

awk '
BEGIN{
FS=OFS=","
}
FNR==NR{
gsub(/\"/,"")
a[tolower($1)]=$0
next
}
a[tolower($1)]{
print a[tolower($1)],$NF
next
}
1' file2.csv file1.csv
<小时/><小时/>

您可以尝试以下操作吗?

awk '
BEGIN{
FS=OFS=","
}
FNR==NR{
a[$1]=$0
next
}
a[$1]{
print a[$1],$NF
next
}
1' Input_file2 Input_file1

或者,如果您可以在 Input_file(s) 中包含小写字母和大写字母的组合,请尝试以下操作。

awk '
BEGIN{
FS=OFS=","
}
FNR==NR{
a[tolower($1)]=$0
next
}
a[tolower($1)]{
print a[tolower($1)],$NF
next
}
1' Input_file2 Input_file1

关于csv - 如何将 csv 文件读入数组并与另一个 csv 文件中的条目进行比较和替换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54284428/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com