1

我是 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 的回应。

这两个文件都将遵循一个顺序。

4

3 回答 3

2

这条线应该做:

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

输出:

rrr|sss|ttt|uuu|vvv
rrr|sss|ttt|uuu|uuu
于 2013-09-22T16:00:51.033 回答
1

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

 sdiff File1 File2

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

用awk做。

awk -F '|' 'NR==FNR{a[$0];next}!($0 in a){print $0}' file1 file2
于 2013-09-22T15:53:38.093 回答
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
于 2013-09-22T19:38:00.673 回答