Shell 脚本查找文件中第 11 列包含“500”的所有行,运行时间过长

Shell 脚本查找文件中第 11 列包含“500”的所有行,运行时间过长

我编写了以下脚本作为练习:

#!/bin/bash

MyFile=$1

while read p; do

error=$(echo $p | awk '{print $11}')

        if [ "$error" = "500" ]
        then
                echo $p
        fi

done < $MyFile

问题是脚本运行缓慢,需要几个小时才能完成,我的设置:

  • Windows 10 上的 Ubuntu(64 位,配备英特尔 i7 6400 2.80GHz 和 8G Ram)。

我的设置或脚本逻辑有问题吗?谢谢,

答案1

使用$(运行子 shell,管道 也是如此|。最好在一个 shell 或一种语言中完成所有工作。

例如在 awk 中完成所有工作:

awk '($11==500){print}' "$1"

或者无需支付任何费用:

while read -a columns ; do
    [[ ${columns[10]} == 500 ]] && echo "${columns[@]}"
done < "$1"

相关内容