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

使用shell脚本比较两个不同文件中的一对一行,shell,diff,string-comparison,cut,Shell,Diff,String Comparison,Cut,我有两个文件: 文件1------------------------------------------>文件2 abc------------------------------------------>abc cde------------------------------------------>cde,xyz,efg,hij,…,n efg------------------------------------------>lmn,opq,weq,…n 现在我想归档1 line1->

我有两个文件:

文件1------------------------------------------>文件2

abc------------------------------------------>abc
cde------------------------------------------>cde,xyz,efg,hij,…,n

efg------------------------------------------>lmn,opq,weq,…n

现在我想归档1 line1->File2 line1,line2->line2等等。。。 但是,在文件2中,一行可以有多个用逗号分隔的条目

现在,若file1中的条目和file2中的任何对应行条目匹配->result ok 否则显示差异

例如:

文件1-----------------文件2

cde-----------------cde、xyz、efg、hij、opt

结果应该是正常的,因为两个文件中都存在cde

你能帮我写一个同样的shell脚本吗
sdiff给了我条目的不同之处,请考虑以下两个测试文件:

$ 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

谢谢约翰,我得到了一个不同的输出。。它使用null打印两个文件。你能帮我把这个bash-3.2#cat file1.txt abc cde mno bash-3.2#cat file2.txt abc efg,cde,hkl mno bash-3.2#bash-3.2#awk-F,'FNR==NR{a[NR]=1;next}{F=0;for(i=1;i@KaranKohli你所说的“它用null打印两个文件”是什么意思?我添加了我得到答案的输出。另外,如果您在bash-3.2上,这意味着您使用OSX?如果是,这也意味着您使用BSD实用程序,包括BSD
awk
。我的命令在GNU
awk
下进行了测试,但我还使用
--posix
选项对其进行了测试,以验证它是否可以在任何st下工作符合标准的
awk
。由于我没有访问Mac的权限,无法直接在BSD下进行测试,因此您需要非常清楚自己的操作以及命令发出的消息。
$ 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