grep和sqlite3哪个快?

sqlite3.c 8413KB 243617行,平均每行34.53个字节。行与行之间用\n (0x0a)分隔。
最后一行是:
/************************** End of sqlite3.c ******************************/

在一台很老的笔记本上:

$ time grep 'End of sqlite3.c' sqlite3.c
/************************** End of sqlite3.c ******************************/
real    0m0.115s
user    0m0.011s
sys     0m0.000s

$ time wc -l sqlite3.c
243616 sqlite3.c
real    0m0.272s
user    0m0.007s
sys     0m0.014s

原因可能是:虽然只显示行数,wc (word count)还统计了别的。

sqlite3的.import的--skip 0不好使;它总把第一行当表头。
--ascii Use \037 and \036 as column and row separators
八进制的036是十进制的30和十六进制的1e: Record Separator

MadEdit里把十六进制0a换1e,慢到卡死。可能是因为不支持一行长达840万个字符。:-)

$ cat t.awk
# 0a还留着,后面加个1e
BEGIN { print "line\036" }
{ print $0 "\036"}
$ time awk -f t.awk sqlite3.c >t.txt
real    0m9.265s
user    0m0.352s
sys     0m0.475s

$ sqlite3 t.db
sqlite> .import --ascii --skip 0 t.txt t
sqlite> .schema t
CREATE TABLE IF NOT EXISTS "t"(
  "line" TEXT
);
sqlite> select count(line) from t;
243617
sqlite> select * from t where line like '%End of sqlite3.c%' ;
/************************** End of sqlite3.c ******************************/ sqlite> 分别不如wc和grep快。t.db 11MB. create index后21MB.
Windows 10, WSL2, Debian, apt-get装的sqlite3 3.34.1 2021-01-20

可能SQL型数据库首先强调数据安全,其次SQL语句的"英语性",最后才是性能。CPU比过去快了很多很多。SSD的随机存取速度比硬盘快得多。

PLEASE SELECT all columns FROM COMPANY GROUP BY name HAVING three. 更英语些。:-) ChatGPT不先学写SQL?

2的26次方是6700万,32次方是40亿。从排好序的40亿个整数中find(x),二分法32次即可找到。高档复杂的like %str%——它们也不快啊。当然,二叉排序树可能很不平衡,qsort未必nlog(n)……

fgrep,即grep -F, --fixed-strings,好像反而慢一点。rgrep是grep  -r, --recursive,好像可以取代find . -name '*.c' | xargs grep?

$ rgrep Cosmin /usr
/usr/include/libpng16/pnglibconf.h:/* Copyright (c) 2018-2019 Cosmin Truta */
...
$ rgrep Cosmin /usr/include/*.h
不到/usr/include/libpng16下去找
$ rgrep Cosmin /usr/*.h
grep: /usr/*.h: No such file or directory

sqlite里.import 时--skip -1也不好使,虽然不报错。.说不定来自dBase. dBase was one of the first database management systems for microcomputers and the most successful in its day.

posted @ 2023-01-13 09:29  Fun_with_Words  阅读(43)  评论(0编辑  收藏  举报









 张牌。