為什麼 sort -o 有用?

為什麼 sort -o 有用?

UNIX 哲學說:做一件事並把它做好。編寫處理文字的程序,因為這是一個通用介面。

sort命令(至少是 GNU sort)可以-o選擇輸出到檔案而不是stdout.比如說,sort foobar -o whatever當我可以的時候為什麼有用sort foobar > whatever

答案1

不僅僅是 GNU 類別擁有它。 BSD 排序也有它。至於為什麼?
(我也覺得這個問題問得好…)

從手冊頁來看:“給出的參數是要使用的輸出文件的名稱,而不是標準輸出。該文件可以與輸入文件之一相同。”

您無法透過重定向轉到相同文件,輸出重定向會擦除該文件。

為了進一步澄清,如果我想對文件進行排序並將排序後的結果放在同一個地方,我可能會考慮嘗試sort < foo > foo。除了輸出重定向會截斷檔案foo以準備接收輸出。然後就沒有什麼可以排序的了。如果沒有“-o”,這樣做的方法是sort < foo > bar ; mv bar foo。我認為該-o選項會執行類似的操作,而無需您擔心。

答案2

'-o' 選項已經sortUnix 第六版

不過我同意你的觀點,它不屬於 Unix 哲學。uniq沒有那個選項(並且sort沒有-u然後)。

在我的 PDP-11 上,我使用了一個有一個參數的小程式:

renac whatever

如果whatever已經存在,它會將 stdin 中的所有內容寫入臨時文件,該文件僅whatever在 stdin 輸入枯竭後才重命名。這樣您就可以將任何命令的輸出透過管道傳輸到renac而不是重定向到檔案名,而不會覆蓋輸入。以這種方式解決覆蓋問題恕我直言更符合Unix哲學。

後來對該程式的一些補充是:如果標準輸入上沒有任何內容(例如,由於命令列部分輸入錯誤而導致),則不覆蓋輸出文件,並允許將標準輸入附加到指定文件的選項。

這是我製作的第一個(如果不是第一個)真正的 C 程式(對於我的工作,我主要在該系統上使用 Pascal 開發)。

相關內容