Я пытаюсь проанализировать результаты моего агента из коллекции из 20 текстовых файлов здесь .
Если вам интересна справочная информация, перейдите по ссылке моя страница , то, что я здесь делаю, это только один шаг.
По сути, я хотел бы вывести только результат моего агента из грязного контекста, поэтому у меня есть эта команда для одного файла:
cat run15.txt | grep -A 50 -E '^Agent Name: agent10479475' | grep -B 50 '^=='
Это означает: после совпадения с регулярным выражением продолжайте движение вперед на 50 строк, останавливайтесь, затем сопоставляйте разделитель строк, начинающийся с "==", по возможности возвращайтесь на 50 строк назад (это, безусловно, приведет к конфликту самой первой строки).
Этот подход зависит от того факта, что жестко запрограммированный счетчик номеров строк 50, было бы просто прекрасно получить ровно один разделитель строк.
И это не будет работать, если я сделаю следующий код:
cat run*.txt | grep -A 50 -E '^Agent Name: agent10479475' | grep -B 50 '^=='
На выходе будет беспорядок ...
Мой вопрос: как убедиться, что grep точно знает, когда прекратить движение вперед, а когда перестать двигаться назад?
Любое предложение или подсказка очень ценится.
Отредактировано: я снова делал что-то нелегкое, опять-таки ... Гуру Bash предлагают несколько более мощных инструментов. Я, конечно, с этого момента переключусь на sed или awk. Это мой подход в конце, после проб и ошибок:
NUM=10479475
for i in {1..20}; do cat "run$i.txt" | grep -A 50 -E "^Agent Name: agent_*$NUM"
| grep -B 50 '^==';done > myresults.txt