Shell脚本,以突出显示两个csv文件之间的差异,例如更新和添加的内容



下面是两个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,  D
data5,  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,    B
data4.3,    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

UpdatedAdded总是打印,即使没有这样的行。

最新更新