Como você extrai certas informações do bzip2 -v?

1

Suponha que eu tenha um arquivo chamado index.html e eu queira compactá-lo e exibir o tamanho da compactação dele. Bem, eu faria isso ...

bzip2 index.html -v

Agora, isso me fornece todos os bits / bytes de dados, taxa de compactação percentual e compactação de entrada e saída. Suponha que eu queira o número in (no meu caso é um 20). Bom isso que eu tentei e funcionou em outros contextos com o gzip eu não tenho problema.

Então, normalmente eu usaria awk assim (mas não funciona).

bzip2 index.html -v | awk '{print $4}'

Eu também tentei

bzip2 index.html -v | cut -f4

As tentativas acima só produzem o que quer que seja que eu esteja me dando, e não extrai apenas as informações que eu quero. Aqui está um exemplo de saída do meu arquivo index.html compactado

bzip2 index.html -v
index.html: 0.346:1, 22.00 bits/bytes, -175.00% saved, 20 in, 55 out

Estou tentando obter o "20", mais especificamente apenas o número 20.

    
por Travis 14.02.2018 / 02:37

1 resposta

1

bzip2 imprime essas informações para stderr. Isso evita que mensagens de erro se misturem a dados descompactados quando uma delas é descompactada para stdout, como ocorre com bzip2 -dc ou bzcat . Você precisa enviar stderr para awk.

Meu bzip2 produz este formato

$ bzip2 index.html -v
  index.html:  1.444:1,  5.542 bits/byte, 30.73% saved, 179 in, 124 out.

Para redirecionar o stderr para stdout e usar o awk para selecionar o número de compressão:

$ bzip2 index.html -v 2>&1 | awk '{print $5}'
30.73%

No shell, 0 é padrão, 1 é padrão e 2 é erro padrão. 2<&1 diz ao shell para receber o erro padrão ( 2 ) e enviá-lo para a saída padrão ( 1 ).

    
por 14.02.2018 / 02:46