【发布时间】:2014-12-22 12:18:53
【问题描述】:
我有一个脚本在一周内运行了几百万次,它只是在名为 file.csv 的 CSV 文件中找到与 $word 完全匹配的第一个单元格,并打印整行,例如CSV:
robot@mechanical@a machine that does automated work
fish@animal@an animal that lives in the sea
tree@plant@a plant that grows in the forest
如果搜索“树”,则会打印:
tree@plant@a plant that grows in the forest
这两种方法得到相同的结果:
awk -F@ -v pattern="$word" '$1 ~ "^" pattern "$" {print; exit}' file.csv
grep ^$word@ file.csv | head -1
同样,这可用于检查 CSV 的第二列中的完全匹配,假设有 3 列:
awk -F@ -v pattern="$word" '$2 ~ "^" pattern "$" {print; exit}' file.csv
grep ^.*@$word@.*@.*$ file.csv | head -1
如果选择两个脚本,例如上面的这个示例,它们总是产生完全相同的输出,我如何快速确定哪个更快?
【问题讨论】:
-
这里还需要注意的是,
grep -m 1在大多数情况下肯定会比grep | head -n 1快。 -
另外,第二个
grep的更好正则表达式是"^[^@]*@$word@",它也更好地匹配Awk 表达式。
标签: bash optimization