Unix比较2个以上的文件

时间:2014-07-22 11:52:46

标签: unix

我有4个文件需要比较,我希望输出显示文件X中其他文件中不存在的数字。

文件由1列组成,每行我们有一个数字。

我无法使用diff命令,因为它不可用。

我试图使用comm,但每次输出都是错误的。

感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

实际上这不是一件容易的事。你可以试试这个。它使用GNU awk。

gawk 'function report() { printf("File \"%s\" has different number of lines: %d\nIt should be %d\n", FILENAME, FNR, o); exit } NR == FNR { a[NR] = $0; ++o; next } FNR > o { report() } a[FNR] != $0 { printf("Line %d of file \"%s\" is different from line in file \"%s\": %s\nIt should be: %s\n", FNR, FILENAME, ARGV[1], $0, a[FNR]); exit } ENDFILE { if (ARGIND > 1 && FNR != o) report() }' file1 file2 file3

脚本版本:

#!/usr/bin/gawk -f
function report() {
    printf("File \"%s\" has different number of lines: %d\nIt should be %d\n",
        FILENAME, FNR, o)
    exit 1
}
NR == FNR { 
    a[NR] = $0
    ++o
    next
}
FNR > o {
    report()
}
a[FNR] != $0 {
    printf("Line %d of file \"%s\" is different from line in file \"%s\": %s\nIt should be: %s\n",
        FNR, FILENAME, ARGV[1], $0, a[FNR])
    exit 1
}
ENDFILE {
    if (ARGIND > 1 && FNR != o)
        report()
}

用法:

gawk -f script.awk file1 file2 file3 ...

答案 1 :(得分:0)

考虑我们有3个文件N1​​ N2 N3进行比较。

在一个名为out的新文件中添加文件中的所有值,然后删除重复项。然后将每个文件与主文件进行比较" out"和输出缺少每个比较。然后在1个文件中添加Missing值,对它们进行排序并删除重复项。

cat N1 N2 N3 | sort -u > out
comm -2 -3 out $sort N1 > Missing1
comm -2 -3 out $sort N2 > Missing2
comm -2 -3 out $sort N3 > Missing3
cat Missing1 Missing2 Missing3 | sort -u > Missing.txt

感谢您的帮助:)

答案 2 :(得分:0)

如果您安装了vim,请发出此命令

vim -d file1 file2 file3 ...