Ответы:
Вы могли бы попробовать
grep pattern file | tail -1
или же
tac file | grep pattern | head -1
или же
tac file | grep -m1 pattern
grep -n
) в реальном файле, я думаю, что в tac
значительной степени нужно было избегать, если только я не хотел делать некоторое вычитание с wc -l
. В противном случае tac
с grep -m1
делает много смысла.
grep
что перестанет работать после первого матча. без -m 1
, grep
сначала найдет все подходящие шаблоны в файле , затем head
покажет только первый - гораздо менее эффективный. Денис, рассмотрите возможность размещения этого в отдельном ответе!
Для тех, кто работает с огромными текстовыми файлами в Unix / Linux / Mac / Cygwin. Если вы используете Windows, проверьте это об инструментах Linux в Windows: https://stackoverflow.com/questions/3519738/what-is-the-best-way-to-use-linux-utilities-under-windows .
Можно следовать этому рабочему процессу, чтобы иметь хорошую производительность:
zq
из пакета.Цитата из его github readme:
Создание индекса
zindex нужно сказать, какая часть каждой строки составляет индекс. Это можно сделать с помощью регулярного выражения, поля или путем передачи каждой строки через внешнюю программу.
По умолчанию zindex создает индекс file.gz.zindex, когда его просят проиндексировать file.gz.
Пример:
создать индекс по строкам, соответствующим числовому регулярному выражению. Группа захвата указывает часть, которая должна быть проиндексирована, а параметры показывают, что каждая строка имеет уникальный числовой индекс.
$ zindex file.gz --regex 'id:([0-9]+)' --numeric --unique
Пример: создайте индекс во втором поле файла CSV:
$ zindex file.gz --delimiter , --field 2
Пример:
создайте индекс для поля JSON orderId.id в любом из элементов в массиве действий корня документа (требуется jq). Запрос jq создает массив всех orderId.ids, а затем соединяет их пробелом, чтобы каждая отдельная строка, переданная в jq, создавала одну строку вывода с несколькими совпадениями, разделенными пробелами (это разделитель по умолчанию).
$ zindex file.gz --pipe "jq --raw-output --unbuffered '[.actions[].orderId.id] | join(\" \")'"
Запрос индекса
Программа zq используется для запроса индекса. Ему дается имя сжатого файла и список запросов. Например:
$ zq file.gz 1023 4443 554
Также возможно вывести по номеру строки, чтобы вывести строки 1 и 1000 из файла:
$ zq file.gz --line 1 1000
Я всегда использую cat (но это делает его немного длиннее): cat file | grep pattern | tail -1
Я бы обвинил моего преподавателя курса администратора Linux в колледже, который любит кошек :))))
- Вам не нужно сначала следить за файлом, прежде чем искать его. grep pattern file | tail -1
и более эффективен тоже.
cat
файл и канал к нему grep
. Вы можете grep
искать файл напрямую через grep pattern file
(и затем использовать tail
для возврата последнего результата), как в ответе Cakemox.
tac file | grep -m 1 pattern