1
因此,一個天真的我想解析使用awk
50個文件,所以我做了以下管道系統如何處理Linux中的多個文件?
zcat dir_with_50files/* > huge_file
cat huge_file | awk '{parsing}'
當然,這是可怕的,因爲它會花時間來創建一個文件,然後消耗了一大堆的內存來傳遞沿着awk
。
然後一位同事告訴我,我可以做到這一點。
zcat dir_with_50files/filename{0..50} | awk '{parsing}'
我很驚訝我會得到沒有內存消耗的相同結果。 ps aux
也顯示這兩個命令並行運行。我對發生的事情感到困惑,這個回答部分回答了我的問題。
https://stackoverflow.com/a/1072251/6719378
但如果管道知道一定量的緩衝數據後啓動第二個命令,爲什麼比第二種方法我幼稚的做法消耗這麼多的內存? 是否因爲我在加載多個文件時使用單個文件上的cat
?
不確定我理解這個問題。你創建了一個文件。一個文件使用內存。這是答案嗎?順便說一下,請參閱https://www.google.com/search?q=uuoc&ie=utf-8&oe=utf-8然後考慮'awk'腳本'文件'而不是'cat file | awk'script''。 –
你如何測量內存使用量?你確定你的內存使用不僅僅是[磁盤緩存](http://www.linuxatemyram.com/)? (嘗試'free -m') – e0k
@EdMorton他正在使用['zcat'](https://linux.die.net/man/1/zcat),它在'cat'之前解壓gzip文件。我不認爲'awk'可以解壓輸入文件。 – e0k