Я хочу получить результаты, начиная с конца файла и продвигаясь до самого начала. Я попытался использовать tac
и передать это в мою команду awk
, но это очень медленно (15 секунд для файла 2 ГБ). По сравнению с обычным поиском (3 секунды для одного и того же файла). Я также добавляю команду awk
в tail -n +1 | head -n 50
для остановки после 50 результатов.
Есть ли более быстрый способ tac
файла? или хотя бы начать поиск снизу вверх?
Общая картина заключается в создании сценария Python, который принимает аргументы (дата начала, дата окончания, условия поиска) и использует их для поиска в файле журнала, организованном по дате. Возврат 50 результатов за раз.
Мне нужно читать от начала к началу, если пользователь хочет искать в порядке убывания (от самой новой даты к самой старой дате).
Пример команды для возрастания результатов («от самого старого до самого нового»):
(я использую find, потому что это заданный пользователем аргумент, он может ссылаться на все файлы (* .txt))
- Дата начала: 2018-03-04T03: 45
- Дата окончания: 2018-03-05T16: 24
- Термин поиска: картофель
find '/home/logs/' -type f -name 'log_file.txt' -exec cat {} \+ 2>&1| LANC=C fgrep 'Potato' | LC_ALL=C IGNORECASE=1 awk -v start="2018-03-04T03:45:00" -v stop="2018-03-05T16:24:59" 'BEGIN{IGNORECASE=1;} {line=$0; xz=" "; for(i=4;i<=NF;i++){xz=xz" "$i};} ($1>=start&&$1<=stop) && (tolower(xz) ~ /Potato/) {print line}' | tail -n +1 | head -n 50
tail -n +1 | head -n 50
- вернуть первые 50 совпадений.
Эта команда занимает около 3-4 секунд, чтобы найти результаты, однако, если я сдам в TAC, это займет около 20 секунд.