做了一个有趣的观察——我将 cURL 语句的输出存储在一个文本文件中,然后对某些字符串进行 grep 处理。后来我更改了代码以将输出存储到变量中。事实证明,这种变化导致我的脚本运行得更慢。这对我来说真的很反直觉,因为我一直认为 I/O 操作会比内存操作更昂贵。这是代码:
#!/bin/bash
URL="http://m.cnbc.com"
while read line; do
UA=$line
curl -s --location --user-agent "$UA" $URL > RAW.txt
#RAW=`curl --location --user-agent "$UA" $URL`
L=`grep -c -e "Advertise With Us" RAW.txt`
#L=`echo $RAW | grep -c -e "Advertise With Us"`
M=`grep -c -e "id='menu'><button>Menu</button>" RAW.txt`
#M=`echo $RAW | grep -c -e "id='menu'><button>Menu</button>"`
D=`grep -c -e "Careers" RAW.txt`
#D=`echo $RAW | grep -c -e "Careers"`
if [[ ( $L == 1 && $M == 0 ) && ( $D == 0) ]]
then
AC="Legacy"
elif [[ ( $L == 0 && $M == 1 ) && ( $D == 0) ]]
then
AC="Modern"
elif [[ ( $L == 0 && $M == 0 ) && ( $D == 1) ]]
then
AC="Desktop"
else
AC="Unable to Determine"
fi
echo $AC >> Results.txt
done < UserAgents.txt
注释行表示存储在变量中的方法。任何想法为什么会发生这种情况?还有什么方法可以进一步加快这个脚本的速度吗?现在处理 2000 个输入条目大约需要 8 分钟。