Команда awk для печати всех строк в файле Unix, где существует шаблон, а числовое значение после найденного шаблона больше 100 - PullRequest
0 голосов
/ 18 мая 2018

У меня есть файл журнала, который имеет формат ниже.У меня возникли проблемы при написании команды Unix для следующего сценария:

Строки в журнале

—---count of xyz
{  "_id" : "xyz",  "total" : 70 }
{  "_id" : "def",  "total" : 100 }
{  "_id" : "xyz",  "total" : 180 }
—Count of abcd
{  "_id" : [ "ABCD" ],  "total" : 94 }
{  "_id" : [ "EFGH" ],  "total" : 94 }

Я использую приведенную ниже команду для печати только строк, где общее количество больше 100.Но это не работает, как ожидалось.Как мы можем это сделать?

My command is 
grep "total" abcd.log | awk '$9 > 50  {print ;}' | more

Ожидаемый результат: все строки, где существует общее и общее> 100

{  "_id" : "xyz",  "total" : 180 }

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Вы запросили awk, но grep может быть немного проще:

grep '"total" *: *[0-9]\{3,\} *}$' input

Если сумма является уникальным ключом, это также должно работать:

grep '"total" *: *[0-9]\{3,\}' input

Они также печатаются, дляНапример, 011, но при необходимости его можно исправить.

0 голосов
/ 18 мая 2018

Поле, которое вы пытаетесь проверить, не всегда 9-е от начала, но всегда 1 от конца:

$ awk '/total/ && ($(NF-1) > 100)' file
{  "_id" : "xyz",  "total" : 180 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...