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