我有两个 csv 文件,假设 A 和 B 。我意识到我不小心把事情搞混了,现在为了撤消这个错误,我想编写一个shell脚本,以便将文件A的第三列中的数据写入文件B的第四列中,并将文件B的第四列中的数据写入文件 B 写入文件 A 的第三列。我知道“cut”命令可用于从特定列获取数据,但我不知道使用什么命令以便在特定数字之后写入 csv 文件单行上分隔符的出现次数。
这样的脚本怎么写呢?
答案1
给定
A.csv:
1,2,V,4
B.csv:
X,Y,Z,3
然后
paste -d, <(cut -d, -f1,2 A.csv) <(cut -d, -f4 B.csv) <(cut -d, -f4 A.csv)
1,2,3,4
答案2
awk
是你的朋友
复制fileA
“说”fileA.bak
和fileB
“说” fileB.bak
:
#first changing fileB
awk -v FS="," 'NR==FNR{fileA[i++]=$3;next}{$4=fileA[j++];print}' fileA.bak fileB.bak > fileB
#fileB should be Okay now.
#now changing fileA
awk -v FS="," 'NR==FNR{fileB[i++]=$4;next}{$3=fileA[j++];print}' fileB.bak fileA.bak > fileA
#fileA should be Okay now.
#verify that you have the desired contents in both fileA & fileB
#Now delete the backup files
rm fileA.bak fileB.bak
笔记
1. 可以将两个awk
脚本结合起来,但为什么分开它们会让事情变得更清晰、更易读。
2. 此解决方案假设您在问题中拥有相同数量的记录,fileA
并fileB
从问题中了解到这一点。