У меня есть большой файл журнала размером до 3 ГБ.Оптимизация поиска в linux
Моя задача - генерировать некоторую отчетность, основанную на # раз, когда что-то регистрируется.
Мне нужно найти время, когда StringA, StringB, StringC вызывается отдельно.
Что я делаю прямо сейчас:
grep "StringA" server.log | wc -l
grep "StringB" server.log | wc -l
grep "StringC" server.log | wc -l
Это длительный процесс, и мой сценарий занимает около 10 минут. Я хочу знать, может ли это быть оптимизировано или нет? Возможно ли запустить одну команду grep и узнать количество времени, когда StringA, StringB и StringC были вызваны индивидуально?
Вы можете использовать 'grep -c' вместо' wc -l': 'grep -c 'StringA" server.log'. 'grep' не может сообщать количество отдельных строк. Вы можете использовать 'awk':' awk '/ StringA/{a ++;}/StringB/{b ++;}/StringC/{C++;} END {print a, b, c}' server.log'. –
@ l3x Я собирался написать ответ, содержащий именно то, что вы написали в этом комментарии, а затем я увидел этот комментарий ... позаботьтесь, чтобы он стал ответом? –
@BenjaminW. Я не хотел публиковать его, так как OP ищет «быстрое» решение. Я не был уверен, будет ли это достаточно быстро для него. Добавлено в любом случае. –