我正在對大量文件進行一個又一個的排序。使用sort -o file file
。 for 迴圈中途停止,在重新啟動之前我想使用 sort 的-c
選項來加速排序。但它說-co
選項不相容。為什麼會這樣呢?
sort --version
sort (GNU coreutils) 8.13
OS: Ubuntu 12.10
答案1
因為您告訴它您只想 --check 不產生輸出,並且您還指定您希望排序後的 --output 轉到某個檔案。這些是互斥的概念,並且它們在 sort.c (gnu coreutils 8.20) 中強制執行
if (checkonly)
{
…
if (outfile)
{
static char opts[] = {0, 'o', 0};
opts[0] = checkonly;
incompatible_options (opts);
}
答案2
假設您正在使用 GNU sort
,您提到的選項可以:
-c, --check, --check=diagnose-first
check for sorted input; do not sort
-o, --output=FILE
write result to FILE instead of standard output
此-c
標誌只會通知您輸入是否已排序:
$ echo -e "A\nB\nC" | sort -c
$ echo -e "A\nC\nB" | sort -c
sort: -:3: disorder: B
因此,如果輸入已排序,則不會列印任何內容,如果輸入未排序,則會將錯誤訊息列印到標準錯誤。換句話說,sort -c
永遠不會印到標準輸出。由於它從不列印,因此重定向其輸出沒有多大意義。
答案3
sort -c 從不產生輸出。它只檢查文件。如果沒有輸出,就沒有理由將其寫入檔案。所以,與-o 不相容。
您可以在對文件進行排序之前使用 -c 作為對文件的某種檢查,但我不確定這實際上會像您想要的那樣加快速度。
答案4
檢查文件是否已排序和對其進行排序有很大的區別。
檢查時,最好的情況是兩個條目就足夠了(相當快),在第一個未排序的條目處,命令可以退出並完成檢查,但此時輸出將不完整,最壞的情況是文件已排序(僅在這種情況下輸出才有意義)。
如果您有很多文件需要排序並且經常發生中斷,那麼您可能應該在再次排序之前以某種方式追蹤已完成的文件。