2014-10-10 3 views
0

230 만 줄의 텍스트 파일이 있습니다. 각 행에는 64 자의 16 진 문자열이 있습니다. 줄 단위로 파일을 읽고 이진 문자열을 이진 파일로 변환하고 파일로 출력하려고합니다. 아래에이 간단한 루프를 bash로 작성했지만 최적이 아니며 완료하는 데 오래 걸릴 것입니다.큰 파일에서 16 진수를 2 진수로 변환

예를 들어 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을 awk를 사용하여 2 진수로 변환"하고 해결책을 선택하십시오. –

+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

가장 빠른 방법은 광기의 한 형태이지만 것 같습니다 .... 내가 bash는 '기본 문자열 교체와 함께이 작업을 수행하는 이상한 충동을했다

그럼에도 불구하고 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