如何解决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
Updated
和 Added
总是被打印出来,即使没有这样的行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。