Aqui um trecho de script do bash para fazer isso
while read line; do
n=$((2#${line// /}))
printf '0x%02X\n' "$n"
done <input-file
em que 2#
significa base 2 e ${var// /}
significa "remover todos os espaços"
Eu tenho um enorme arquivo de texto com dígitos representando um valor de 8 bits em binário. Eu quero converter estes para hexadecimal (ou decimal, realmente não importa). Ou seja, eu tenho um arquivo de texto contendo, por exemplo,
0 0 0 0 1 1 0 1
0 0 1 1 1 0 0 1
0 1 0 0 0 1 0 1
1 0 0 0 1 1 0 1
(apenas 8 bits) e eu quero converter isso para, digamos,
0x0d
0x39
0x45
0x1d
Parece que isso pode ser feito com uma macro awk script / vim ou uma combinação de outras ferramentas.
Aqui um trecho de script do bash para fazer isso
while read line; do
n=$((2#${line// /}))
printf '0x%02X\n' "$n"
done <input-file
em que 2#
significa base 2 e ${var// /}
significa "remover todos os espaços"
com o Perl:
perl -ne 's/ *//g; printf("0x%02x\n", eval("0b$_"))' somefile.txt
com o awk:
awk '{d=0; for (i=1; i<=NF; i++) {d=(d*2)+$i} printf "0x%02x\n", d}' binary.txt
Ou com bc:
(echo obase=16; ibase=2; sed 's/ //g' binary.txt) | bc
Tags command-line text conversion