執行命令cat mydata.txt | sort | uniq | > mydata.txt
後,爲什麼mydata.txt文件爲空?排序管道擦除文件
Q
排序管道擦除文件
-3
A
回答
1
答案是|
和> mydata.txt
之間的空白,將uniq的輸出轉換爲空白並將其發送到文件。
即使您在最後一個|
之後執行了一條命令,它仍會在讀取數據時寫入mydata,這很糟糕,並且可能會刪除大部分內容。
在Linux shell中,不會順序執行命令流水線。全部同時執行,一個命令的輸出附加到下一個命令的輸入。
您可以通過看你的計算機是從另一個終端窗口運行的是什麼,使用實用工具,比如top
或pstree
因此確認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
一般來說,寫入文件你正在閱讀是不安全的,但也許這裏正在存儲內部的東西。
你的命令沒有意義 – meda 2014-09-27 07:47:23
因爲'| | >'是一個錯字。很確定你的意思是'cat mydata.txt |排序| uniq> mydata.txt' – WhozCraig 2014-09-27 07:47:26
試試'cat mydata.txt |排序| uniq> mydata.tx' – juanchopanza 2014-09-27 07:48:38