微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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,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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。