我是awk脚本新手。 我想通过两个文件File1.txt和File2.txt的单词(字段)比较来做一个字段。 这些文件包含一个列表(管道)分隔的领域。
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
我们比较相同的行号。在两个文件中。
两个文件的第1行中的字段匹配。
在第2行中,所有字段(lll,mmm,nnn,ooo,ppp)都不匹配文件2的第2行中的所有字段(rrr,sss,ttt,uuu,vvv)。类似于第5个字段(vvv) ,uuu)两个文件中的第3行不匹配。
因此行号。 2号线和号码3应该得到bash的回应。
这两个文件都将遵循订单。
答案 0 :(得分:2)
这一行应该:
awk 'NR==FNR{a[FNR]=$0;next}a[FNR]!=$0' file1 file2
输出:
rrr|sss|ttt|uuu|vvv
rrr|sss|ttt|uuu|uuu
答案 1 :(得分:1)
两个比较两个文件,更好地使用内置命令sdiff:
sdiff File1 File2
这将显示两个文件中不同的行。
使用awk。
awk -F '|' 'NR==FNR{a[$0];next}!($0 in a){print $0}' file1 file2
答案 2 :(得分:0)
以下几行可能会根据需要进行调整,另一种语言如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