我有非常大的二进制文件,没有行和字段分隔符。目标是高效地将这些文件处理为制表符分隔的文件。在
文件的结构如下:
每个记录都是固定长度的,20字节。每个字段的长度不同,三个字段的长度分别为3、7和10字节。每个字段也表示不同的数据类型,字段1和2是int,3是char。在
处理这些文件的最有效方法是什么?我希望尽可能简单,使用Bash工具dd/odsed/awk,尽可能避免使用perl/python,除非性能差异非常大。在
下面是一个工作尝试,很慢。以上工具我是新手,请详细解释。在
binfile="binfile.BIN"
for (( i = 0 ; i <= 20000000 ; i += 20 ))
do
field1=$( od "${binfile}" -An --skip-bytes"$((${i}))" --read-bytes=3 --format=dI )
field2=$( od "${binfile}" -An --skip-bytes"$((${i}+3))" --read-bytes=7 --format=dI )
field3=$( od "${binfile}" -An --skip-bytes"$((${i}+10))" --read-bytes=10 --format=c )
echo - ${field1}'\t'${field2}'\t'${field3} >> output.tab
done
从STDIN读取,输出到STDOUT,并执行错误检查:
但我很肯定你会发现这比一次读更多的书要慢,所以我用以下方法:
^{pr2}$如果您的“cut”不支持输出分隔符,请尝试“gcut”(GNU cut)或考虑安装gnucoreutils。在
请告诉我们不同的解决方案(请尽快尝试)
相关问题 更多 >
编程相关推荐