我有一个shell脚本,它从文件中读取一个手机号码,并与另一个文件进行比较,以确定该号码属于哪个区域。我必须检查该系列是否是该号码的前4位数字或前5位数字,它给我操作员和该号码所属的区域。
如果我执行此任务的时间大约为500k,那么这个脚本的执行时间在24核和64 GB RAM的机器上大约需要2个小时,这是一种耻辱,因此我在这里找到一个更好的方法更有效地执行相同的任务。
我的代码是 -
while read num
do
num4=$(echo $num | awk '{print substr($0,0,4)}'); #First 4 digits
num5=$(echo $num | awk '{print substr($0,0,5)}'); #First 5 digits
taco=$(grep -w $num5 db.txt | wc -l); #Count if found in file db.txt
taca=$(grep -w $num4 db.txt | wc -l); #Count if found in file db.txt
if [ "$taco" -eq 0 ]; then
if [ "$taca" -eq 0 ]; then
grep "$num4" mobile_db.txt >> operator_temp.txt #If not found in db.txt file then check in different file
else
grep -w $num4 db.txt >> operator_temp.txt #Copy the content found to a file
fi
else
grep -w $num5 db.txt >> operator_temp.txt #Copy the content found to a file
fi
done < output_num_temp.txt
db.txt文件的示例是 -
7101 Idea UttarPradesh(West)
7107 RelianceMobile MadhyaPradesh
7108 RelianceMobile Gujarat
7110 RelianceMobile Rajasthan
73027 Airtel UttarPradesh(West)
73028 Airtel UttarPradesh(West)
73029 Airtel UttarPradesh(West)
91210 Airtel AndhraPradesh
91211 Airtel AndhraPradesh
91212 Airtel AndhraPradesh
这也是mobile_db.txt的示例,这是将存储在文件operator_temp.txt中的预期输出
答案 0 :(得分:2)
它的声音就像你需要的那样:
. use
但是没有更明确的要求和更多关于输入文件的信息,以及简明,可测试的样本输入和问题中的预期输出,这只是猜测。
只要您的2个db文件不是非常庞大,上面应该会在几秒钟而不是几小时内运行。有关不应使用shell循环来操作文本的众多原因的讨论,请参阅https://unix.stackexchange.com/q/169716/133219。