【发布时间】:2018-10-26 03:17:35
【问题描述】:
当我使用 awk 执行此操作时,它相对较快,即使它是 Row By Agonizing Row (RBAR)。我试图在 Bash 中创建一个更快更优雅的 bug 抵抗解决方案,它只需要通过文件进行更少的传递。使用此代码通过 bash 完成前 1,000 行可能需要 10 秒。我可以在大约同一时间用 awk 完成 25 次遍历所有百万行文件! bash 怎么慢了几个数量级?
while read line
do
FIELD_1=`echo "$line" | cut -f1`
FIELD_2=`echo "$line" | cut -f2`
if [ "$MAIN_REF" == "$FIELD_1" ]; then
#echo "$line"
if [ "$FIELD_2" == "$REF_1" ]; then
((REF_1_COUNT++))
fi
((LINE_COUNT++))
if [ "$LINE_COUNT" == "1000" ]; then
echo $LINE_COUNT;
fi
fi
done < temp/refmatch
【问题讨论】:
-
因为
read很慢 - stackoverflow.com/questions/13762625/… 为什么不用 Python 写这个?这里没有什么需要特定于 bash。 -
您的代码创建了太多进程,这会使它变得更慢。 awk 或 python 是你最好的选择。