У меня есть огромный текстовый файл с цифрами, представляющими 8 битовых значений в двоичном файле. Я хочу преобразовать их в шестнадцатеричный (или десятичное число, действительно не имеет значения). Таким образом, у меня есть текстовый файл, содержащий, например.
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
(всего 8 битов) и я хотел бы преобразовать это в, скажем,
0x0d
0x39
0x45
0x1d
Это кажется, что это могло быть сделано с awk макросом сценария/энергии или комбинацией любых других инструментов.
Здесь отрывок сценариев удара, чтобы сделать это
while read line; do
n=$((2#${line// /}))
printf '0x%02X\n' "$n"
done <input-file
где 2#
средства базируются 2 и ${var// /}
означает, "удаляют все пробелы"
С awk:
awk '{d=0; for (i=1; i<=NF; i++) {d=(d*2)+$i} printf "0x%02x\n", d}' binary.txt
Или с до н.э:
(echo obase=16; ibase=2; sed 's/ //g' binary.txt) | bc
С Perl:
perl -ne 's/ *//g; printf("0x%02x\n", eval("0b$_"))' somefile.txt