2011-10-31 40 views
3

我有一個非常我正在使用grep處理大型壓縮文件。打印行號模1000000

zcat blah.gz | grep -e pattern | gzip -c > pattern.gz 

我想打印的東西stderr爲每處理萬條左右輸入線,只是爲了跟蹤進度。有任何想法嗎?

回答

4

嘗試pv。它默認爲字節,但有一個開關來使它成爲線。

+0

...乾杯! ......現在我只希望有一個'zpv'。 – badroit

+0

沒有'zpv'我知道,但是因爲'pv'與二進制數據一起工作,您可以切換它和'zcat':'pv infile [s] | zcat | grep ...',並且因爲它可以告訴文件的大小,你應該得到一個確定的進度條和一個相當準確的ETA。 – Kevin

4

更換的grep有:

 
perl -ne 'print if /pattern/; print STDERR "." if $. % 1000000 == 0' 
1

mbuffer(1)工具可能是東西給你。引用一些摘要:

mbuffer工具用於緩衝數據流並向用戶顯示I/O速率和摘要。這對於將備份寫入 快速磁帶驅動器或通過網絡進行流式傳輸尤其有用。如果使用得當, 它可以防止緩衝區欠載並加速整個備份或傳輸過程。

3

運行它通過AWK:

zcat blah.gz | awk 'BEGIN {x = 1}; {if ((x++ % 1000000) == 0) print x " " $0 > "/dev/stderr"; print $0 }' | grep -e pattern | gzip -c > pattern.gz