2013-07-25 34 views
0

好吧,所以我有一個腳本生成一個值列表(爲了簡單起見用換行符分隔),但是它們是按照一個順序生成並存儲到文件中的,但是我需要以相反的順序處理文件(由於數據集可能變得非常大,我無法改變第一步如何操作)。用於逐行讀取文件的最兼容的方法

我對bash中的有用命令tactail -r非常熟悉,但不幸的是我在其中工作的環境都沒有(除了主要的POSIX標準之外,我不相信它有很多)。

所以我在尋找的是從逆向順序讀取文件行的​​最好方法,最好儘可能少的內存開銷,因爲文件可能會變得非常大(儘管個別行應該是相對較小)。

+1

你的兩個目標似乎有衝突:每次文件被追加時,它都會添加一條你應該已經使用的記錄。另外,你的環境是什麼? – chepner

+0

可能的重複:[unix:如何從文件向後打印行(不使用「tac」)?](http://unix.stackexchange.com/questions/9356/how-can-i-print-lines-from -file-backwards-without-use-tac) – ahilsend

+0

@chepner是我第一次讀取我正在從流中讀取的數據並處理這些值,以僅過濾掉我需要的數據,並將其寫入文件。然而,爲了保持內存使用健壯的大數據集,我必須按照我處理它們的順序編寫這些值。但是一旦完成,我需要以相反的順序對它們執行操作,因此需要逐行讀取文件。目前,我只是將大塊內容讀取到內存中進行反向處理,但它並不漂亮。 – Haravikk

回答

1

此方法使用sort這將具有較高的內存開銷

cat -n filename | sort -rn | cut -f2- 

如果您已經安裝Perl中,你可以使用一個模塊一樣File::ReadBackwards

+0

我希望避免太多的內存開銷,但腳本應該是可移植的,所以我不能依賴perl或捆綁任何東西。似乎'sort'是唯一真正的選擇,謝謝你的答案! – Haravikk