【发布时间】:2012-10-16 19:55:24
【问题描述】:
我想知道从 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脚本吗?
-
你在你的shell脚本中使用
awk吗?使用awk读写文件几乎不需要一分钟。here -
如果您在 shell 脚本中逐行处理文件,而且速度要慢 30 倍,这听起来是对的。例如,每次执行 >> 时,都会打开和关闭文件,而在 C 语言中则保持打开状态(顺便说一句,您也可以在 shell 脚本中保持打开状态)。
-
请发布您的 shell 脚本和有关您正在运行它的 shell 的信息。
-
能看到C程序的相关部分吗?
标签: c performance bash shell