awk脚本:检查一个文件中的所有单词(字段)是否包含在另一个文件中

我是awk脚本的新手。 我想通过两个文件File1.txt和File2.txt的字(字段)比较做一个字段。 这些文件包含一个|列表 (pipe)分开的领域。

File 1: ------------------- aaa|bbb|ccc|eee|fff lll|mmm|nnn|ooo|ppp rrr|sss|ttt|uuu|vvv File 2: ------------------- aaa|bbb|ccc|eee|fff rrr|sss|ttt|uuu|vvv rrr|sss|ttt|uuu|uuu 

我们比较同一行号。 在这两个文件中。

这两个文件的第一行的字段匹配。

在第二行中,所有字段(lll,mmm,nnn,ooo,ppp)都不与文件2的第2行中的所有字段(rrr,sss,ttt,uuu,vvv)匹配。同样,第5个字段(vvv,uuu)第三行在两个文件不匹配。

因此,行号。 2和行号 3应该得到bash的回应。

这两个文件将遵循命令。

这一行应该这样做:

 awk 'NR==FNR{a[FNR]=$0;next}a[FNR]!=$0' file1 file2 

输出:

 rrr|sss|ttt|uuu|vvv rrr|sss|ttt|uuu|uuu 

两个比较两个文件,最好使用已经内置的命令sdiff:

  sdiff File1 File2 

这将显示两个文件中不同的行。

用awk做。

 awk -F '|' 'NR==FNR{a[$0];next}!($0 in a){print $0}' file1 file2 

以下几行可能会根据需要进行修改,另一种语言如perl可能更合适

 i=1 while read -r -u4 l1 || read -r -u5 l2; do if [[ $l1 != $l2 ]]; then echo "$i: $l1 != $l2" fi ((i+=1)) done 4<file1 5<file2