繁体   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