假设我有一个名为index.html的文件,我想压缩它并显示它的压缩大小。好吧,我会这样做...
bzip2 index.html -v
现在,这给了我所有的数据位/字节、压缩率百分比以及输入和输出压缩。假设我想要 in 数字(在我的例子中是 20)。嗯,这是我尝试过的,它在其他情况下与 gzip 一起工作,我没有问题。
所以通常我会awk
像这样使用(但它不起作用)。
bzip2 index.html -v | awk '{print $4}'
我也尝试过
bzip2 index.html -v | cut -f4
上述尝试仅产生 -v 给我的任何内容,并且不会仅提取我想要的信息。这是我的压缩 index.html 文件的示例输出
bzip2 index.html -v
index.html: 0.346:1, 22.00 bits/bytes, -175.00% saved, 20 in, 55 out
我正在尝试获取“20 in”,更具体地说,就是数字 20。
答案1
bzip2
将该信息打印到 stderr。当使用 或 解压缩到标准输出时,这可以防止错误消息与解压缩数据混合bzip2 -dc
在一起bzcat
。您需要将 stderr 发送到 awk。
我的 bzip2 产生这种格式
$ bzip2 index.html -v
index.html: 1.444:1, 5.542 bits/byte, 30.73% saved, 179 in, 124 out.
将 stderr 重定向到 stdout 并使用 awk 选择压缩数:
$ bzip2 index.html -v 2>&1 | awk '{print $5}'
30.73%
在 shell 中,0
是标准输入,1
是标准输出,2
是标准错误。 2<&1
告诉 shell 获取标准错误 ( 2
) 并将其发送到标准输出 ( 1
)。