如何从 bzip2 -v 中提取某些信息?

如何从 bzip2 -v 中提取某些信息?

假设我有一个名为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)。

相关内容