我想使用unix比较两个csv文件的内容。这个比较的规则是比较两个文件的应用程序名称(如果匹配)比较file_number并根据比较返回成功或失败消息。如果两个file_number匹配。
第一个文件是:
file_number Application_name
25,AWX
78,UYH
90,TGY
89,GHB
第二个文件是:
file_number Application_name日期消息
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
任何帮助?
答案 0 :(得分:1)
首先,您需要订购文件。
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
加入文件,保留文件1 -a1
中无法使用的行。结果连接两个文件的字段,因此我们只需要字段2和4(cut
)然后对输出进行排序。
$ 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