2016-07-06 78 views
1

我目前正在使用CSV文件,它的大小可以是10的GB,並且需要根據使用情況動態地編輯頭文件。當只編輯第一行時,linux sed讀取整個文件

對於此我使用:

sed -i '1,1s/id/id:ID(Person)/g' etc. 

其具有僅編輯標題中的期望的效果,但可以採取向上10秒來完成。我想這是因爲整個文件仍在流式傳輸,但我無法找到解決這個問題的辦法。

任何想法或正確的方向點將不勝感激。

+3

如果不重寫整個文件來移動數據,它將如何適應11個字節?你想'ID(Person)'覆蓋接下來的11個字節? – TessellatingHeckler

+0

@Thomas:我的評論不合適。刪除了。所以這會很快。 ;) – sjsam

+0

這是I/O限制。你把運行時間與'cat file> file.copy'比較了嗎?你將無法走得更快。 –

回答

1

sed不是問題所在。問題是您正在流式傳輸10GB文件。如果這是您正在進行的唯一操作,則sed可能不會比其他任何基於行的實用程序(awk等)差得多。

如果你首先閱讀整個文件,Perl可能會做得更好,但是你的內存佔用將非常大,並且取決於你的系統,你可能會開始分頁。

如果這是您經常要做的事情,並且很長一段時間,您可以通過讀取更大的數據塊,以較低級別的語言做得更好,從而允許塊層爲您優化磁盤訪問。如果你保留「塊」足夠大的塊層,但足夠小,以避免分頁,你應該能夠擊中甜蜜點。

可能不值得1轉換。

相關問題