我有 3 个文件(links_file、my_links 和 my_queue),我正在用 links_file 做 3 件事:
- 删除具有重复信息的行(并非要检查所有行,只检查其中的一部分,在下面的代码中是 var img_url)。使用 img_url 保留第一行
- 删除 my_links 文件中存在 img_url 字符串的行
- 删除 my_queue 文件中存在 img_url 字符串的行
我有工作代码,但是在links_file 中大约需要30.000 行,在my_links 文件中需要1.000 行,在my_queue 文件中需要300 行,这需要很长时间(超过10 分钟)。
function clean_file(){
links_file="$1"
my_links="$2"
my_queue="$3"
out_file="$4"
rm -rf "$out_file"
prev_url=""
cat "$links_file" | while read line
do
img_url=$(echo $line | perl -pe 's/[ \t].*//g' | perl -pe 's/(.*)_.*/$1/g')
# $links_file is sorted by img_url, so i can just check the previous value
test "$prev_url" = "$img_url" && echo "duplicate: $img_url" && continue
prev_url="$img_url"
test $(grep "$img_url" "$my_links" | wc -l) -ne 0 && echo "in my_links: $img_url" && continue
test $(grep "$img_url" "$my_queue" | wc -l) -ne 0 && echo "in my_queue: $img_url" && continue
echo "$line" >> "$out_file"
done
}
我正在尝试优化代码,但没有想法。我对 perl 的了解有限(我通常只将它用于简单的正则表达式替换)。任何有助于优化这一点的帮助将不胜感激。