Converte o arquivo com números inteiros escritos em ascii para arquivo binário de inteiros

4

Eu tenho um arquivo que contém uma longa lista de números inteiros escritos em ascii separados por novas linhas, assim:

-175
2
-19345
345592
-45
2355

etc ...

Eu quero converter este arquivo em um arquivo "binário" contendo os mesmos números inteiros, escritos como inteiros reais de 4 bytes.

Que ferramenta de linha de comando posso usar para conseguir isso?

    
por Bjarke Freund-Hansen 08.08.2014 / 11:30

2 respostas

5
perl -pe '$_=pack"l",$_' < infile > outfile

Usa o endianness local. Use l> em vez de l para big-endian e l< para little-endian.

Veja perldoc -f pack para mais informações.

Observe que é l como em minúsculas L (para inteiro longo ), não em 1 dígitos.

$ printf '%s\n' 1234 -2 | perl -pe '$_=pack"l",$_'| od -vtd4
0000000        1234          -2
0000010
$ printf '%s\n' 1234 -2 | perl -pe '$_=pack"l>",$_'| od -vtx1
0000000 00 00 04 d2 ff ff ff fe
0000010
    
por 08.08.2014 / 11:34
2

Outro perl :

$ perl -pe '$_ = pack("i", $_)' file

i representa o valor inteiro assinado (que representa pelo menos 4 bytes, depende do compilador C local). Use a opção l como resposta do Stéphane Chazelas para usar sempre 32 bits.

    
por 08.08.2014 / 11:38