我想知道从 C 迁移到 shell 脚本的程序对性能的影响会有多严重。
我有密集的 I/O 操作。
例如,在 C 中,我有一个从文件系统文件读取并写入另一个文件的循环。我在没有任何一致关系的情况下获取每一行的一部分。我正在使用指针执行此操作。一个非常简单的程序。
在 Shell 脚本中,为了在一行中移动,我使用了 ${var:(char):(num_bytes)}
。处理完每一行后,我将其连接到另一个文件。
"$out" >> "$filename"
该程序执行如下操作:
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"
问题是,C 需要半分钟来处理一个 400MB 的文件,而 shell 脚本需要 15 分钟。
我不知道是我做错了什么还是没有在 shell 脚本中使用正确的运算符。
编辑:我不能使用 awk,因为没有处理该行的模式
我试着评论“echo $out”>>“$outFileName”,但情况并没有好多少。我认为问题是 ${line:106:61} 操作。有什么建议么?
感谢您的帮助。
最佳答案
根据您的描述,我怀疑您正在 shell 脚本中生成新进程。如果是这样,那么这就是您的时间去向。 fork/exec需要大量操作系统资源一个新的过程。
关于c - Shell 脚本 vs C 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13088807/