Unix比较两个以上的文件

nbnkbykc  于 2023-06-22  发布在  Unix
关注(0)|答案(3)|浏览(192)

我有四个需要比较的文件,我希望输出显示文件X中的数字,这些数字在其他文件中不存在。
这些文件由一列组成,其中每行都有一个数字。
示例:
文件% 1(% 1% 2% 3)
文件2(1 2 3)
文件3(1 2 3)
文件4(1 2)
我们需要输出来显示缺少3。因此输出将为3。
我无法使用diff命令,因为它不可用。
我尝试使用comm,但每次输出都是错误的。

f1tvaqid

f1tvaqid1#

假设我们有3个文件N1 N2 N3要比较。
将所有值添加到一个新的文件中,删除重复项。
然后将每个文件与主文件“out”进行比较,并为每次比较输出Missing。
然后将缺失的值添加到一个文件中,对它们进行排序并删除重复的值。

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

tktrz96b2#

其实这不是一件容易的事。你可以试试这个它使用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 ...
ndasle7k

ndasle7k3#

如果你已经安装了vim,那么发出这个命令

vim -d file1 file2 file3 ...

相关问题