问题描述
下面是两个 csv 文件,我们需要将这两个文件与第一列进行比较
NewFile.csv
-----------
data1,A
data2.5,B
data3,C
data4.3,D
data5,E
data6,F
OldFile.csv
------------
data1,A
data2,B
data3,C
data4,E
OutputFile.csv
-------------
Updated
data2.5,B
data4.3,D
Added
data6,F
我正在使用下面的命令来做到这一点,但它只是向我展示了所有不同之处,需要将其与 NewFile.csv 中的更新和新添加的内容分开
awk -F',' 'FNR==NR{a[$1];next};!($1 in a)' NewFile.csv OldFile.csv
data2.5,D
data6,F
但我正在寻找一个输出,我可以在其中清楚地声明使用 shell 脚本在新的中添加和更新的内容。
解决方法
以下脚本标识了
- 已修改(两个文件中相同的行号具有不同的第一个字段)
-
已添加(
NewFile.csv
中不在OldFile.csv
中的所有行号)
不考虑删除的行。
awk -F,-v oldfile=OldFile.csv 'BEGIN {print "Updated"}
{new0=$0; new1=$1; if (!added && !getline < oldfile) {print "Added"; added=1}}
!added && new1!=$1 {print new0}
added' NewFile.csv
例如,这会打印
Updated
data2.5,B
data4.3,D
Added
data6,F
Updated
和 Added
总是被打印出来,即使没有这样的行。