2014-10-10 2 views
0

У меня есть текстовый файл с ~ 2,3 миллиона строк. Каждая строка содержит шестнадцатеричную строку в 64 символа. Я пытаюсь прочитать в файле строку за строкой и преобразовать шестнадцатеричную строку в двоичную и выводить в файл. Я написал этот простой цикл ниже в bash, но я знаю, что он не является оптимальным, и он будет навсегда завершен.Преобразование Hex в двоичный файл на большой файл

Есть ли более быстрый способ, например, с помощью awk? Лучше использовать perl? Мне просто нужно что-то гораздо быстрее.

cat /tmp/hexFile.log | while read line 
do 
bin=$(echo "obase=2; ibase=16; $line" | bc) 
bin=`echo $bin | sed 's/\\\ //g'` 
echo $bin >> /tmp/binOutput.log 
done 
+0

только google "конвертировать hex в двоичный файл с использованием awk" и выбрать решение. –

+0

Эд вы очень полезны. – ssbsts

ответ

0

Это работает для меня.

#!/usr/bin/perl 
while (<>) { 
    chomp; 
    for (my $i = 0; $i < length($_); $i += 1) { 
     printf('%04b', hex(substr($_, $i, 1))) 
    } 
    print "\n"; 
} 
0

Самый быстрый способ сделать это в C

Тем не менее, у меня было странное желание сделать это с Баш»родной замены строки .... это выглядит как форма безумия, но это будет работа .... извините, я просто не мог удержаться, чтобы показать вам :-) Заинтересованы ли вы в версии C?

#!/bin/bash 

while read LINE 
do 
     LINE={LINE//0/zzzz} 
     LINE={LINE//1/zzzy} 
     LINE={LINE//2/zzyz} 
     LINE={LINE//3/zzyy} 
     LINE={LINE//4/zyzz} 
     LINE={LINE//5/zyzy} 
     LINE={LINE//6/zyyz} 
     LINE={LINE//7/zyyy} 
     LINE={LINE//8/yzzz} 
     LINE={LINE//9/yzzy} 
     LINE={LINE//a/yzyz} 
     LINE={LINE//b/yzyy} 
     LINE={LINE//c/yyzz} 
     LINE={LINE//d/yyzy} 
     LINE={LINE//e/yyyz} 
     LINE={LINE//f/yyyy} 
     LINE={LINE//y/1} 
     LINE={LINE//z/0} 
     echo "$LINE" 
done <yourhexfile>yourbinaryfile 
+0

Это также можно сделать так же, как и sed, возможно, быстрее? – Gunstick