Bash Unix中两个csv的内容比较
我想使用unix比较两个csv文件的内容。此比较的规则是比较两个文件的应用程序名称(如果匹配),比较文件编号,并根据比较返回成功或失败消息。即,如果两个文件编号都匹配 第一个文件是: 文件号应用程序名Bash Unix中两个csv的内容比较,bash,unix,command-line,Bash,Unix,Command Line,我想使用unix比较两个csv文件的内容。此比较的规则是比较两个文件的应用程序名称(如果匹配),比较文件编号,并根据比较返回成功或失败消息。即,如果两个文件编号都匹配 第一个文件是: 文件号应用程序名 25,AWX 78,UYH 90,TGY 89,GHB 第二个文件是: 文件号应用程序名称日期消息 92, AWX, 2014-12-01 , SUCCESS 66, AWX, 2014-12-02 , SUCCESS 3, UYH, 2014-12-01 , SUCCESS 3, TGY
25,AWX
78,UYH
90,TGY
89,GHB
第二个文件是:
文件号应用程序名称日期消息
92, AWX, 2014-12-01 , SUCCESS
66, AWX, 2014-12-02 , SUCCESS
3, UYH, 2014-12-01 , SUCCESS
3, TGY, 2014-12-02 , SUCCESS
90, TGY , 2014-12-01 , SUCCESS
89, GHB , 2014-12-02 , SUCCESS
我的最终输出应该如下所示:
AWX , FAIL
UYH, FAIL
TGY, SUCCESS
GHB, SUCCESS
有什么帮助吗?首先您需要订购文件
sort input1.txt > filename1.txt
sort input2.txt | cut -f1,2,4 -d, > filename2.txt
在第二个文件中,我删除了日期,因为输出中不需要日期
$ join -a1 -j1 -t, filename1.txt filename2.txt | cut -f2,4 -d, | sort > intermediate1.txt
$ cat intermediate1.txt
AWX
GHB, SUCCESS
TGY, SUCCESS
UYH
$ cat intermediate1.txt | awk '!/SUCCESS/{print $1", FAIL"}' > intermediate2.txt
加入文件,保留文件1中不成对的行-a1
。结果连接了两个文件中的字段,因此我们只需要字段2和4(cut
),然后对输出进行排序
$ join -a1 -j1 -t, filename1.txt filename2.txt | cut -f2,4 -d, | sort > intermediate1.txt
$ cat intermediate1.txt
AWX
GHB, SUCCESS
TGY, SUCCESS
UYH
$ cat intermediate1.txt | awk '!/SUCCESS/{print $1", FAIL"}' > intermediate2.txt
将字符串,FAIL
添加到不包含SUCCESS
的行中
$ join -a1 -t, intermediate1.txt intermediate2.txt > final.txt
再次加入,你就拥有了它
$ cat final.txt
AWX, FAIL
GHB, SUCCESS
TGY, SUCCESS
UYH, FAIL
我不明白你是怎么比较他们的。你能解释一下这种比较的规则吗?你的问题太模糊了。为了更深入地了解您的目标:为两个CSV表提供列名,并定义成功和失败标准。成功/失败标准是什么?是的,如果文件号不改变,这是成功还是失败?是的,如果文件号相同,这是成功还是失败