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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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
Bash Unix中两个csv的内容比较_Bash_Unix_Command Line - Fatal编程技术网

Bash 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

我想使用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, 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表提供列名,并定义成功和失败标准。成功/失败标准是什么?是的,如果文件号不改变,这是成功还是失败?是的,如果文件号相同,这是成功还是失败