【发布时间】:2018-03-07 14:14:04
【问题描述】:
第一次发帖,请多多指教。我一次读取一行文件“bar”,并使用 sed 将“foo”中的每一行(从第一行开始)替换为从“bar”读取的行。下面的代码有效,但是当“foo”为 48,890 行而“bar”为 ~24,445 行(正好是 foo 的一半长度)时,它的速度非常慢。
有人对如何加快这个过程有建议吗?
x=1
while read i;do
sed -i "$x s/^.*$/$i/" foo
x=$[$x +2]
done < bar
【问题讨论】:
-
一定要使用
sed吗?awk或perl会更好。 -
每次读取来自
bar的一行时完全重写foo是当然会很慢。 -
顺便说一句,
$[ ]实际上是 1970 年代的语法。自 1990 年代初发布 POSIX sh 标准以来,$(( ))一直是在 shell 中输入数学上下文的正确语法。虽然 bash 也支持$[ ],但许多纯 POSIX shell(ash、dash 等)仅支持$(( ))。 -
感谢
$(())@Charles Duffy 的提醒