Как собрать данные на основе начального символа в строке? - PullRequest
0 голосов
/ 12 февраля 2020

, поэтому я пытаюсь найти более эффективный по времени способ "grep / search" строк, которые начинаются с определенного c символа / набора символов. У меня есть файл объемом 50 ГБ, содержащий данные, отсортированные с помощью команды LC_ALL='C' sort -u data.txt > data_sorted.txt Затем, скажем, я хочу найти все строки, которые начинаются с horse Я бы в настоящее время сделал LC_ALL='C' grep -i -E "^horse.*" data_sorted.txt

Проблема I С этой командой я сталкиваюсь с тем, что grep не видит автоматически (и не переходит на) строки, начинающиеся с horse , вместо этого он получает grep непосредственно 0-9A-Z или что-то еще. Существует ли альтернативный метод сопоставления данных, и он переходит конкретно к первому символу вашего поискового запроса, чтобы ускорить процесс.

Это довольно сложно объяснить, извиняюсь за любую путаницу.

1 Ответ

0 голосов
/ 12 февраля 2020

Один из возможных подходов - использовать look(1). хотя обычно он используется для поиска в словаре списка системных слов, вы можете указать другой файл и выполнить двоичный поиск строк, соответствующих данному префиксу.

Так что вы можете попробовать:

look horse data_sorted.txt

(В некоторых версиях look может потребоваться опция -b для бинарного поиска; обратитесь к локальной странице справки)

Если вы хотите выполнять поиск без учета регистра, как в grep case, файл должен быть отсортирован без учета регистра (sort -f), а look требуется опция -f.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...