Bash 在大文件上将十六进制转换为二进制

Bash 在大文件上将十六进制转换为二进制,bash,awk,binary,hex,data-conversion,Bash,Awk,Binary,Hex,Data Conversion,我有一个大约230万行的文本文件。每行包含一个64字符的十六进制字符串。我试图逐行读取文件,并将十六进制字符串转换为二进制并输出到文件。我在下面的bash中编写了这个简单的循环,但我知道它不是最优的,它将永远无法完成 有没有更快的方法,比如使用awk?更好地使用perl?我只需要快得多的东西 cat /tmp/hexFile.log | while read line do bin=$(echo "obase=2; ibase=16; $line" | bc ) bin=`echo $bin |

我有一个大约230万行的文本文件。每行包含一个64字符的十六进制字符串。我试图逐行读取文件,并将十六进制字符串转换为二进制并输出到文件。我在下面的bash中编写了这个简单的循环,但我知道它不是最优的,它将永远无法完成

有没有更快的方法,比如使用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
这对我有用

#!/usr/bin/perl
while (<>) {
    chomp;
    for (my $i = 0; $i < length($_); $i += 1) {
        printf('%04b', hex(substr($_, $i, 1)))
    }
    print "\n";
}
#/usr/bin/perl
而(){
咀嚼;
对于(my$i=0;$i<长度($41;;$i+=1){
printf('%04b',十六进制(substr($\u,$i,1)))
}
打印“\n”;
}

最快的方法是用C语言编写

尽管如此,我还是有一种奇怪的冲动想用bash的原生字符串替换来做这件事……这看起来像是一种疯狂的行为,但它会起作用……对不起,我忍不住要告诉你:-)你对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
#/bin/bash
读行时
做
LINE={LINE//0/zzzz}
LINE={LINE//1/zzzy}
LINE={LINE//2/zzyz}
LINE={LINE//3/zzyy}
LINE={LINE//4/zyz}
LINE={LINE//5/zyzy}
LINE={LINE//6/zyz}
LINE={LINE//7/zyyy}
LINE={LINE//8/yzzz}
LINE={LINE//9/yzzy}
LINE={LINE//a/yzyz}
LINE={LINE//b/yzyy}
LINE={LINE//c/yyz}
LINE={LINE//d/yyzy}
LINE={LINE//e/yyyyz}
LINE={LINE//f/yyyy}
LINE={LINE//y/1}
LINE={LINE//z/0}
回音“$LINE”
完成yourbinaryfile

只需在谷歌上搜索“使用awk将十六进制转换为二进制”并选择一个解决方案。Ed您非常有帮助。sed也可以用同样的方法实现,也许更快?