我得到了4個文件,我需要比較,我希望輸出顯示文件X中不存在於其他文件中的數字。Unix比較超過2個文件
這些文件由1列組成,其中每行都有一個數字。
我不能使用diff命令,因爲它不可用。
我試圖使用通訊,但輸出每次都是錯誤的。
感謝您的幫助。
我得到了4個文件,我需要比較,我希望輸出顯示文件X中不存在於其他文件中的數字。Unix比較超過2個文件
這些文件由1列組成,其中每行都有一個數字。
我不能使用diff命令,因爲它不可用。
我試圖使用通訊,但輸出每次都是錯誤的。
感謝您的幫助。
考慮,我們有3個文件N1 N2 N3進行比較。
將文件中的所有值添加到新調出的文件中,並刪除重複項。然後比較每個文件與主「out」並輸出每個比較的缺失。然後在1個文件中添加缺失值,對它們進行排序並刪除重複項。
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
感謝您的幫助:)
實際上這不是一件容易的事。你可以試試這個。它使用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 ...
嘿 我無法嘗試這個,因爲我有一個cygwin和腳本在Windows上的問題。 我發現了另一種解決方案,它適合少量文件比較 – Necro1992
@ Necro1992沒關係。我只是想提供一個例子:) – konsolebox
如果你再裝VIM發出此命令
vim -d file1 file2 file3 ...
片段或樣品? – konsolebox
@konsolebox你是什麼意思? – Necro1992
我們必須有實際的數據來處理和預期的輸出,以幫助你。 – konsolebox