使用shell脚本比较两个不同文件中的一对一行
我有两个文件: 文件1------------------------------------------>文件2 abc------------------------------------------>abc使用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->
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
。我的命令在GNUawk
下进行了测试,但我还使用--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