使用shell脚本比较2个不同文件中的一对一行

时间:2015-01-14 05:04:16

标签: shell diff string-comparison cut

我有2个文件:

File1 ---------------------------------------> File2

abc -----------------------------------------> ABC
cde -----------------------------------------> CDE,XYZ,EFG,HIJ,...,N

efg -----------------------------------------> LMN,OPQ,WEQ,... N

现在我想要File1 line1 - > File2 line1,line 2 - >第2行等等...... 但是,在file2中,一行可以有多个以“逗号”分隔的条目。

现在,如果file1中的条目与文件2中的任何相应行条目匹配 - >结果好 否则显示差异......

例如:

FILE1 ---------------------- FILE2

cde ---------------------- cde,xyz,efg,hij,opt

结果应该没问题,因为两个文件中都存在cde。

你能帮我写一个shell脚本吗? sdiff给了我条目差异

1 个答案:

答案 0 :(得分:0)

考虑这两个测试文件:

$ cat file1
abc
cde
efg

$ cat file2
abc
cde,xyz,efg,hij,n
lmn,opq,weq,n

考虑命令:

$ awk -F, 'FNR==NR{a[NR]=$1;next} {f=0;for (i=1;i<=NF;i++)if($i==a[FNR])f=1;if(f)print "OK";else print a[FNR]" -----> " $0}' file1 file2
OK
OK
efg -----> lmn,opq,weq,n

这会在OK的相应行的任何位置找到file1中的键的每一行打印file2。如果不是,它会打印两行,如图所示。

另一个例子

从评论中,考虑这两个文件,其中所有行都匹配:

$ cat f1
abc
cde
mno

$ cat f2
abc
efg,cde,hkl
mno

$ awk -F, 'FNR==NR{a[NR]=$1;next} {f=0;for (i=1;i<=NF;i++)if($i==a[FNR])f=1;if(f)print "OK";else print a[FNR]" -----> " $0}' f1 f2
OK
OK
OK