我是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