繁体   English   中英

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

[英]Compare one to one lines in 2 different files using shell scripting

我有2个文件:

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

abc -----------------------------------------> abc
cde -----------------------------------------> cde,xyz,efg,hij ,...,N

efg -----------------------------------------> lmn,opq,weq,。 ...... N

现在,我想对File1第1行-> File2第1行,第2行->第2行,依此类推...但是,在File2中,一行可以有多个以'逗号'分隔的条目。

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

例如:

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

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

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

您能帮我帮我写一个相同的sdiff的shell脚本吗?

考虑以下两个测试文件:

$ 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

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

另一个例子

从注释中,考虑以下两个文件,其中所有行都匹配:

$ 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM