Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 要比较2个csv文件以获得更新、新记录和已删除记录的计数吗_Shell_Unix - Fatal编程技术网

Shell 要比较2个csv文件以获得更新、新记录和已删除记录的计数吗

Shell 要比较2个csv文件以获得更新、新记录和已删除记录的计数吗,shell,unix,Shell,Unix,假设我们有一个文件abc.csv.dat 100000114,AU79 Attract Mens Deo 150 Ml Can,100000113,AU79 Attract Mens Deo 150 Ml Can,18,_,18,Deo 100000115,AU79 Sauve Mens Deo 150 Ml Can,100000112,AU79 Sauve Mens Deo 150 Ml Can,18,_,18,Deo 100000117,AU79 Altitude Mens Deo 150

假设我们有一个文件
abc.csv.dat

100000114,AU79 Attract Mens Deo 150 Ml Can,100000113,AU79 Attract Mens Deo 150 Ml Can,18,_,18,Deo
100000115,AU79 Sauve Mens Deo 150 Ml Can,100000112,AU79 Sauve Mens Deo 150 Ml Can,18,_,18,Deo
100000117,AU79 Altitude Mens Deo 150 Ml Can,100000116,AU79 Altitude Mens Deo 150 Ml Can,18,_,18,Deo
100000119,DU AU79 Bandit Mens Deo 150 Ml Can,100000118,DU AU79 Bandit Mens Deo 150 Ml Can,18,_,18,Deo
100000114,AU79 Attract Mens Deo 250 Ml Can,100000113,AU79 Attract Mens Deo 250 Ml Can,18,_,18,Deo
100000115,AU79 Sauve Mens Deo 150 Ml Can,100000112,AU79 Sauve Mens Deo 150 Ml Can,18,_,18,Deo
100000119,DU AU79 Bandit Mens Deo 150 Ml Can,100000118,DU AU79 Bandit Mens Deo 150 Ml Can,18,_,18,Deo
100000120,AU79 Altitude Mens Deo 350 Ml Can,100000116,AU79 Altitude Mens Deo 350 Ml Can,18,_,18,Deo
第二个文件是
xyz.csv.dat

100000114,AU79 Attract Mens Deo 150 Ml Can,100000113,AU79 Attract Mens Deo 150 Ml Can,18,_,18,Deo
100000115,AU79 Sauve Mens Deo 150 Ml Can,100000112,AU79 Sauve Mens Deo 150 Ml Can,18,_,18,Deo
100000117,AU79 Altitude Mens Deo 150 Ml Can,100000116,AU79 Altitude Mens Deo 150 Ml Can,18,_,18,Deo
100000119,DU AU79 Bandit Mens Deo 150 Ml Can,100000118,DU AU79 Bandit Mens Deo 150 Ml Can,18,_,18,Deo
100000114,AU79 Attract Mens Deo 250 Ml Can,100000113,AU79 Attract Mens Deo 250 Ml Can,18,_,18,Deo
100000115,AU79 Sauve Mens Deo 150 Ml Can,100000112,AU79 Sauve Mens Deo 150 Ml Can,18,_,18,Deo
100000119,DU AU79 Bandit Mens Deo 150 Ml Can,100000118,DU AU79 Bandit Mens Deo 150 Ml Can,18,_,18,Deo
100000120,AU79 Altitude Mens Deo 350 Ml Can,100000116,AU79 Altitude Mens Deo 350 Ml Can,18,_,18,Deo
我想使用unix命令比较这两个文件,以创建我的unix shell脚本,该脚本将统计新行、更新行和删除行。 我的示例文件很小,但实际文件包含20000多条记录

谢谢你的关注。

你可以用它来获得你想要的大部分。它将“更新”视为“删除并插入”

插入:
comm-13 abc.csv.dat xyz.csv.dat

删除:
comm-23 abc.csv.dat xyz.csv.dat

未更改:
comm-12 abc.csv.dat xyz.csv.dat

comm要求对输入文件进行排序。

您可以使用它来获取所需的大部分内容。它将“更新”视为“删除并插入”

插入:
comm-13 abc.csv.dat xyz.csv.dat

删除:
comm-23 abc.csv.dat xyz.csv.dat

未更改:
comm-12 abc.csv.dat xyz.csv.dat


comm要求对输入文件进行排序。

以下是使用comm的更深入示例:

$ comm -3 <(sort abc.csv.dat) <(sort xyz.csv.dat) | sed -e 's/^[ \t]*//' | awk -F , '{if (a[$1]) {print "^"$1","} {a[$1] = $0}}' > data2.txt
--计算已删除的行数:

$ cat data2.txt | grep -v -E -f - <(comm -2 -3 <(sort abc.csv.dat) <(sort xyz.csv.dat)) | wc -l
1
--列出删除行:

$ cat data2.txt | grep -v -E -f - <(comm -2 -3 <(sort abc.csv.dat) <(sort xyz.csv.dat))
100000117,AU79 Altitude Mens Deo 150 Ml Can,100000116,AU79 Altitude Mens Deo 150 Ml Can,18,_,18,Deo

$cat data2.txt | grep-v-E-f-下面是一个使用comm的更深入的示例:

$ comm -3 <(sort abc.csv.dat) <(sort xyz.csv.dat) | sed -e 's/^[ \t]*//' | awk -F , '{if (a[$1]) {print "^"$1","} {a[$1] = $0}}' > data2.txt
--计算已删除的行数:

$ cat data2.txt | grep -v -E -f - <(comm -2 -3 <(sort abc.csv.dat) <(sort xyz.csv.dat)) | wc -l
1
--列出删除行:

$ cat data2.txt | grep -v -E -f - <(comm -2 -3 <(sort abc.csv.dat) <(sort xyz.csv.dat))
100000117,AU79 Altitude Mens Deo 150 Ml Can,100000116,AU79 Altitude Mens Deo 150 Ml Can,18,_,18,Deo

$cat data2.txt | grep-v-E-f-如何判断两条记录是否已更改?有主键吗?在第一个文件中,我们有4条记录,经过一些逻辑后,新文件被创建xyz.csv.dat。我们有PK作为第一列。在第一个文件中,我们用一些新值更新了第一行,保持第一列固定。第二行相同。第三行我们有de;第二行和第四行是相同的。新记录被添加到这个新文件10000120,…现在我想计算我已经删除、添加和更新的这些行。您如何判断两条记录是否已更改?有主键吗?在第一个文件中,我们有4条记录,经过一些逻辑后,新文件被创建xyz.csv.dat。我们有PK作为第一列。在第一个文件中,我们用一些新值更新了第一行,保持第一列固定。第二行相同。第三行我们有de;第二行和第四行是相同的。新记录被添加到这个新文件10000120,…现在我想计算我已经删除、添加和更新的这些行