Shell
如何解壓縮並列印壓縮文本文件的最後幾行?
我有 6 個 gzipped 文本文件,每個壓縮後約為 17G。我需要查看每個文件的最後幾行(解壓縮)以檢查是否存在特定問題。顯而易見的方法非常緩慢:
for i in *; do zcat "$i" | tail -n3; done
我在想我可以做一些聰明的事情,比如:
for i in *; do tail -n 30 "$i" | gunzip | tail -n 4 ; done
或者
for i in *; do tac "$i" | head -100 | gunzip | tac | tail -n3; done
但兩者都抱怨:
gzip: stdin: not in gzip format
我以為那是因為我錯過了
gzip
標題,但這也失敗了:$ aa=$(head -c 300 file.gz) $ bb=$(tail -c 300 file.gz) $ printf '%s%s' "$aa" "$bb" | gunzip gzip: stdin: unexpected end of file
我真正想要的是一個
ztail
或ztac
,但我認為那些不存在。誰能想出一個聰明的技巧,讓我在不解壓縮整個文件的情況下解壓縮並列印壓縮文件的最後幾行?
正如已經說過的那樣,如果文件已使用標準壓縮,則不能
gzip
。如果您可以控制壓縮,則可以使用dictzip
來壓縮文件,它將文件壓縮到單獨的塊中,您可以只解壓縮最後一個塊(通常為 64KB)。它向後兼容gzip
,這意味著 dictzip 文件也是完全合法的 gzip 文件。另一種可能性是,如果您將 gzip 壓縮文件作為多個已 gzip 文件的串聯獲得,您可以搜尋最後一個 gzip 簽名並解壓縮之後的所有內容。