У меня есть процесс, который отслеживает наши журналы AWS CloudWatch. Он отлично работает, за исключением того факта, что каждая строка предваряется группой CloudWatch и идентификатором контейнера. Например:
core-api 04a7ce3daf83aa018a92eb4a613c87354695dc8219f213697f7f786b81d4d [PROD] - INFO: GET 200 - 5ms
core-api 04a7ce3daf83aa018a92eb4a613c87354695dc8219f213697f7f786b81d4d [PROD] - INFO: POST 200 - 7ms
Есть ли способ передать мою команду журналов, которую я использую с некоторым типом фильтра, чтобы отображать информацию о строке только после [PROD] -
?
Вы можете попробовать использовать cut
вырезать интересующие вас столбцы.
tail -f whatever | cut -d ' ' -f 3-
[PROD] - INFO: GET 200 - 5ms
[PROD] - INFO: POST 200 - 7ms
это -d
устанавливает пробел в качестве разделителя полей, а -f
указывает на отображение только третьего и последующих полей.
Определение полей тоже может стать более сложным. Предположим, вы действительно хотите избавиться только от этого раздражающего, бесполезного второго поля. Затем вы можете указать -f 1,3-
.
core-api [PROD] - INFO: GET 200 - 5ms
core-api [PROD] - INFO: POST 200 - 7ms
Увидеть cut
справочную страницу, чтобы узнать больше о том, что вы можете сделать с помощью этой команды.
Вы можете попробовать использовать awk. Если все строки предварены 4 полями, то
...| awk '{$1=$2=$3=$4=""; print $0}'
но вам может потребоваться явно очистить вывод
...| awk '{$1=$2=$3=$4=""; print $0; fflush() }'
Это в основном обнуляет первые 4 поля. Обратите внимание: если вы затем захотите напечатать только определенные поля, первое поле все равно будет стоить 5 долларов, но я думаю, что если вы захотите это сделать, вам не нужно будет сначала обнулять поля.
Если бы было переменное количество полей, и они всегда заканчивались [PROD] -
тогда вы можете использовать sed
...| sed s '/^.* \[PROD\] -//'
который в основном заменяет все, от начала строки до -
с нулем //
.