2012-02-02 35 views

回答

12

嘗試:

sort -o file.txt file.txt 

http://ss64.com/bash/sort.html

`-o OUTPUT-FILE' 
    Write output to OUTPUT-FILE instead of standard output. If 
    OUTPUT-FILE is one of the input files, `sort' copies it to a 
    temporary file before sorting and writing the output to 
    OUTPUT-FILE. 
+0

+1 ;-)一些細節:'sort'本身會執行'mv foo.txt file.txt'。 – olibre 2012-02-02 17:58:57

+0

啊,我們走吧!我看到那個男人的旗幟,但沒有注意到額外的信息。編輯:奇怪。其他信息不在我的手冊頁中。爲什麼你要鏈接的手冊頁更全面? – Nagel 2012-02-02 18:00:01

+1

@Nagel - 不知道。當我搜索「man sort」時,這只是Google上的第一次搜索。伯克利手冊頁有類似的信息,但更簡短一點。 – 2012-02-02 18:06:23

1

的經典Unix工具像sort的理念包括,你可以建立一個管他們。每個小工具從STDIN讀取並寫入STDOUT。這樣,管道中的下一個小工具就可以讀取第一個作爲輸入的輸出並對其執行操作。

所以我說,這是一個錯誤,而不是一個功能。

也必須在非常好的書ESR讀到P ipes, Redirection, and Filters

+0

看起來像一本好書。 – Nagel 2012-02-02 17:57:54

0

是的,你確實需要第二個文件!該命令

sort file.txt > file.txt 

必須慶典設立的stout重定向它開始執行sort之前。這是一種破壞輸入文件的特定方式。

如果你想將多個文件進行排序嘗試:

cat *.txt | sort > result.txt 
+0

我很懷疑。不知何故,它只是覺得不雅:P謝謝! – Nagel 2012-02-02 17:57:32

+0

-1有一個'-o'選項,允許輸出到同一個文件 – 2012-02-02 17:59:38

+0

@AndrewCooper:我知道,但是上面使用輸出重定向的情況下,在這種情況下,你需要額外的文件!即使-o使用臨時文件,你不必關心創建並不意味着它不存在! – Mithrandir 2012-02-02 18:01:12

1

因爲你寫回同一個文件你」在排序完成loadi之前,總是會出現重定向打開輸出文件的問題原始的。所以是的,你需要使用一個單獨的文件。

現在,話雖如此,有辦法第一緩衝整個文件到管道流,但通常你不會想要做的是,雖然它是可能的,如果你寫的東西去做。但是你會在開始和結束時插入特殊工具來進行緩衝。但是,如果使用重定向,則Bash會立即打開輸出文件。

0

,如果你正在處理從一個單一的文件排序固定長度的記錄,則排序算法可以在文件中交換記錄。有一些可用的算法可用。您的選擇取決於文件的隨機性屬性的大小。一般來說,與其他排序算法相比,快速排序往往會交換最少數量的記錄,並且通常是首先完成的排序。

相關問題