[英]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.