카테고리별로 그룹화된 결과가 포함된 파일이 있습니다. 예를 들어:
checking results for $var
here are some results1 for $var status ok
here are some results2 for $var status ok
here are some results3 for $var status ok
checking results for $var2
here are some results1 for $var2 status ok
checking results for $var3
here are some results1 for $var3 status ok
here are some results2 for $var3 status ok
here are some results3 for $var3 status critical
here are some results4 for $var3 status ok
특정 카테고리의 행에 "중요" 상태가 있는지 확인하고 그렇다면 표시해야 합니다. 예를 들어:
Status $var -- OK
Status $var2 -- OK
Status $var3 -- Critical
Note : Critial at $result3 for $var3
grep -A
특정 변수에 따른 결과 수가 다양하기 때문에 사용이 나에게 적합하지 않습니다.
답변1
awk는 다음을 수행합니다.
awk '
BEGIN {
priority["ok"] = 10
priority["critical"] = 20
}
/^$/ {next}
/^checking/ {var = $NF}
{
if (priority[status[var]] < priority[$NF])
status[var] = $NF
if ($NF == "critical")
crit[var ":" $4] = 1
}
END {
for (var in status)
print var, status[var]
for (c in crit) {
split(c, ary, /:/)
printf("critical at %s for %s\n", ary[2], ary[1])
}
}
'
산출
$var ok
$var2 ok
$var3 critical
critical at results3 for $var3
답변2
저는 awk 스크립트를 사용하겠습니다:
/^checking results for / {
if (curvar) { print curvar, curstatus; }
curvar = $NF
curstatus = "ok"
}
/^here are some results.* for .* status / {
if ($NF != "ok") { curstatus = $NF;
}
END {
if (curvar) { print curvar, curstatus; }
}
배열을 사용하여 "잘못된 결과" 테이블을 작성할 수 있습니다.