Koh*_*kun 10 c bash shell performance
我想知道从C迁移到shell脚本的程序性能会有多糟糕.
我有密集的I/O操作.
例如,在C中,我从文件系统文件中读取循环并写入另一个文件系统文件.我正在接受每一行的部分而没有任何一致的关系.我是用指针做的.一个非常简单的程序.
在Shell脚本中,要移动一行,我正在使用${var:(char):(num_bytes)}.在我完成处理每一行后,我只是将它连接到另一个文件.
"$out" >> "$filename"
Run Code Online (Sandbox Code Playgroud)
该程序执行以下操作:
while read line; do
out="$out${line:10:16}.${line:45:2}"
out="$out${line:106:61}"
out="$out${line:189:3}"
out="$out${line:215:15}"
...
echo "$out" >> "outFileName"
done < "$fileName"
Run Code Online (Sandbox Code Playgroud)
问题是,C需要半分钟来处理400MB文件,而shell脚本需要15分钟.
我不知道我做错了什么或者没有在shell脚本中使用正确的运算符.
编辑:我不能使用awk,因为没有一个模式来处理该行
我试着评论"echo $ out">>"$ outFileName",但它并没有变得更好.我认为问题是$ {line:106:61}操作.有什么建议?
谢谢你的帮助.
正如 Donitor 和 Dietrich 所建议的,我对 AWK 语言做了一些研究,正如他们所说,这再次取得了巨大的成功。这是 AWK 程序的一个小示例:
#!/bin/awk -f
{
option=substr($0, 5, 9);
if (option=="SOMETHING"){
type=substr($0, 80, 1)
if (type=="A"){
type="01";
}else if (type=="B"){
type="02";
}else if (type=="C"){
type="03";
}
print substr($0, 7, 3) substr($0, 49, 8) substr($0, 86, 8) type\
substr($0, 568, 30) >> ARGV[2]
}
}
Run Code Online (Sandbox Code Playgroud)
它就像一个魅力。处理500mb文件仅需1分钟
| 归档时间: |
|
| 查看次数: |
4835 次 |
| 最近记录: |