'wc -c' fornece resultados inesperados?

4

Eu tenho um arquivo .log que é um arquivo binário (BSC0000.log). Então, visualize-o em um visualizador HEX (OKteta) e exporte-o diretamente para uma string (split_space.txt). Com espaços no meio como 00 DF 00 45 .

A coisa é que, quando contei os caracteres em ambos os arquivos, mostrei uma grande diferença.

laksith@laksithPC:~/Desktop/test$ cat split_space.txt | wc -c
31617470
laksith@laksithPC:~/Desktop/test$ cat BSC0000.log | wc -c
10539157

Pode-se adivinhar que pode ser por causa dos espaços entre . Mas então deve ser mais ou menos como 10539157 + 10539157/2 mas como é que este valor é 31617470.

mas 10539157 * 3 = 31617471 que é o valor da linha de comando +1

    
por Laksith 23.09.2015 / 06:25

1 resposta

5

Um byte tem 8 bits. Como o hex usa 16 caracteres, 0-9a-f, ele pode exibir apenas quatro bits por caractere. São necessários dois caracteres hexadecimais para exibir um byte. Adicione a isso que a maioria dos caracteres na exibição hexadecimal possui um espaço depois deles e você verá porque a exibição hexadecimal leva até três vezes mais bytes que o binário arquivo.

Exemplo

Vamos criar um arquivo contendo um único byte:

$ printf 'a' >afile
$ wc afile
0 1 1 afile

Agora, vamos exibi-lo com, por exemplo, hexdump -C :

$ hexdump -C afile
00000000  61                                                |a|
00000001

O caractere a é o caractere ASCII 61 (hex). O único byte no arquivo leva dois caracteres para exibir em hexadecimal (e três se o hexadecimal tiver um espaço após ele).

    
por John1024 23.09.2015 / 06:38