我有4个文件需要比较,我希望输出显示文件X中其他文件中不存在的数字。
文件由1列组成,每行我们有一个数字。
我无法使用diff命令,因为它不可用。
我试图使用comm,但每次输出都是错误的。
感谢您的帮助。
答案 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 ...