Существует множество способов сделать это в зависимости от структуры ваших входных данных.
Предполагая, что строки stats_missing
и memory
всегда будут присутствовать после queryId
, вы можете сделать что-то вроде:
awk -F':' '/queryId/ {query=$0}
/stats_missing/ {stats=$0}
/memory/ {mem=$2}
query && stats && mem>5000 {
print query;print stats; print "memory: "mem; query=stats=mem="";}'
Это сохраняет строки, соответствующие query
,stats_missing
и значение memory
, затем, когда все 3 заполняются И значение memory
превышает 5000 (в этом примере), оно выводит их на печать.
Например,
$ cat mem.txt
queryId : 3440b6c90a6ccec1
stats_missing : true
memory : 493719877394422178
queryId : d94bf4e4756e6342
stats_missing : false
memory : 2214592512
queryId : 3440b6c90a6ccec1
stats_missing : true
memory : 4978
queryId : d94bf4e4756e6342
stats_missing : false
memory : 200
$ awk -F':' '/queryId/ {query=$2}
/stats_missing/ {stats=$2}
/memory/ {mem=$2}
query && stats && mem>5000 {
print "queryId:"query;print "stats_missing:"stats; print "memory:"mem; query=stats=mem="";}' mem.txt
queryId: 3440b6c90a6ccec1
stats_missing: true
memory: 493719877394422178
queryId: d94bf4e4756e6342
stats_missing: false
memory: 2214592512
Как уже упоминалось, это может вывести из строя, если эти две другие строки не всегда присутствуют перед следующим идентификатором запроса.
Если это не так, вам нужно будет что-то делать, например, отслеживать каждый раз, когда вы сталкиваетесь с новым queryId и затем сбрасывать переменные.Или сделайте что-нибудь, например, сохраните все данные queryId, stats_missing и памяти в массиве, основанном на последнем обнаруженном queryId, а затем напечатайте все в конце.Множество способов снять шкуру с этой кошки в зависимости.