Расширение моего комментария ...
Вы можете скачать исходники для grep через git с помощью:
git clone https://git.savannah.gnu.org/git/grep.git
Вы можете увидеть в строке 96 комментария src / grep.ca:
/* A list of lineno,filename pairs corresponding to -f FILENAME
arguments. Since we store the concatenation of all patterns in
a single array, KEYS, be they from the command line via "-e PAT"
or read from one or more -f-specified FILENAMES. Given this
invocation, grep -f <(seq 5) -f <(seq 2) -f <(seq 3) FILE, there
will be three entries in LF_PAIR: {1, x} {6, y} {8, z}, where
x, y and z are just place-holders for shell-generated names. */
Что является ключом к пониманию того, что искомые шаблоны, независимо от того, поступают ли они через -e
или через -f
с файлом, сбрасываются в массив.Этот массив является источником поиска.перемещение по этому массиву в C будет происходить быстрее, чем ваша оболочка перебирает файлТак что это одно победит в гонке на скорость.
Кроме того, как я уже упоминал в своем комментарии, grep -f list.txt sales.txt
легче читать, проще в обслуживании, и нужно вызывать только одну программу (grep
).