簡體   English   中英

從 zcat 命令中提取文件 output 的最后 n 個百分比

[英]extracting last n percentage of a file output from zcat command

我正在嘗試提取來自 zcat 命令的文件 output 的最后 2%。 我嘗試做某事

numlines=$(zcat file.tar.gz | wc -l)
zcat file.tar.gz | tail -n + $numlines*(98/100)

但是這種方法的問題是我的文件太大了,我無法承受兩次運行 zcat 命令。 有沒有什么辦法可以通過管線數量或其他方式來做到這一點。

編輯: zcat file.tar.gz | tar -xO | dd 2>&1 | tail -n 1 zcat file.tar.gz | tar -xO | dd 2>&1 | tail -n 1 zcat file.tar.gz | tar -xO | dd 2>&1 | tail -n 1

復制了 16942224047 字節(17 GB、16 GiB),109.154 秒,155 MB/秒

任何幫助將不勝感激。

讀取內容到變量。 我假設有足夠的 RAM 可用。

content=$(zcat file.tar.gz| tar -xO)
lines=$(wc -l <<<"$content")
ninetyeight=$((100-$lines/100*98))
tail -n $ninetyeight

這僅在文件包含至少 100 行時有效。

下面的 awk 程序只會將你文件的最后n % 保留到 memory 中。百分比取floor wise,也就是說,如果我們文件的n % 代表 134.56 行,它將打印 134 行

awk -v n=2 '{a[FNR]=$0; min=FNR-int(FNR*n/100)}
            {i=min; while(i in a) delete a[i--]}
            END{for(i=min+1;i<=FNR;++i) print a[i]}' - < <(zcat file)

你可以在用seq 100替換zcat file時驗證這一點

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM