2014-09-27 60 views
-3

執行命令cat mydata.txt | sort | uniq | > mydata.txt後,爲什麼mydata.txt文件爲空?排序管道擦除文件

+0

你的命令沒有意義 – meda 2014-09-27 07:47:23

+1

因爲'| | >'是一個錯字。很確定你的意思是'cat mydata.txt |排序| uniq> mydata.txt' – WhozCraig 2014-09-27 07:47:26

+0

試試'cat mydata.txt |排序| uniq> mydata.tx' – juanchopanza 2014-09-27 07:48:38

回答

1

答案是|> mydata.txt之間的空白,將uniq的輸出轉換爲空白並將其發送到文件。

即使您在最後一個|之後執行了一條命令,它仍會在讀取數據時寫入mydata,這很糟糕,並且可能會刪除大部分內容。

在Linux shell中,不會順序執行命令流水線。全部同時執行,一個命令的輸出附加到下一個命令的輸入。

您可以通過看你的計算機是從另一個終端窗口運行的是什麼,使用實用工具,比如toppstree

因此確認simulataneous操作,如評論者建議,你應該使用一個臨時文件作爲輸出。創建輸出後,將其移回原始名稱,並將其刪除。

像這樣:

cat mydata.txt | sort | uniq > tmp-mydata.txt 
mv tmp-mydata.txt mydata.txt 

或者作爲@tripleee表明,sort命令已經uniq的功能,並且可以使用這個命令:

sort -u -o mydata.txt mydata.txt

一般來說,寫入文件你正在閱讀是不安全的,但也許這裏正在存儲內部的東西。

+1

或者只是'sort -u -o mydata.txt mydata.txt' – tripleee 2014-09-27 08:08:46

+0

是的,這似乎工作。除了經驗/測試之外,如何知道這是安全的?這裏的手冊頁只說-o設置輸出文件。 – Paul 2014-09-27 08:12:14

+0

如果您發現錯誤,請報告。 – tripleee 2014-09-27 08:13:06