比较两个csv并将更新的行写入Linux Bash终端中的第三个csv [已关闭]

7dl7o3gd  于 12个月前  发布在  Linux
关注(0)|答案(4)|浏览(73)

已关闭,此问题需要details or clarity。它目前不接受回答。
**想改善这个问题吗?**通过editing this post添加详细信息并澄清问题。

20天前关闭。
Improve this question
我试图比较两个csv和generete只有行,有不同的Linux巴什终端和输出到第三csv在巴什终端
grep -v -f csv 1 csv 2> csv 3
但我无法获取与csv 1和csv 2不同的行,而是打印csv 2中的所有行。
csv1 a,B,c g,fc
csv2 a,B,c g,f,c l,f,c
csv3 l,f,c
这应该是预期的输出

mitkmikd

mitkmikd1#

试试这个,看看它是否工作(确保安装panda):

python -c "import pandas as pd; df1 = pd.read_csv('csv1.csv'); df2 = pd.read_csv('csv2.csv'); df_diff = pd.concat([df1, df2]).drop_duplicates(keep=False); df_diff.to_csv('csv3.csv', index=False)"```
5us2dqdw

5us2dqdw2#

示例文件:

$ head csv?
==> csv1 <==
1,2,X
4,5,6
7,8,9

==> csv2 <==
1,2,3
a,b,c
7,8,9

一个comm / sort的想法:

$ comm --output-delimiter="" -3 <(sort csv1) <(sort csv2)
1,2,3
1,2,X
4,5,6
a,b,c
6l7fqoea

6l7fqoea3#

给出:

head file{1,2}

==> file1 <==
1,2,3
4,5,6
7,8,9

==> file2 <==
1,2,3
a,b,c
7,8,9

您可以使用此awk查看file2中哪些行不在file1中:

awk 'FNR==NR{f1[$0]; next}
!($0 in f1)' file1 file2

图纸:

a,b,c

然后,如果您想要从file2到file1的差异,则反转两个文件输入:

awk 'FNR==NR{f1[$0]; next}
!($0 in f1)' file2 file1

图纸:

4,5,6

或者您可以使用daff来获得更完整的解决方案。

7xllpg7q

7xllpg7q4#

如果您有file1.csv

a,b,c
g,f,c

和file2.csv

a,b,c
g,f,c
l,f,c

您可以运行

grep -v -F -f file1.csv file2.csv

得到

l,f,c

相关问题