カテゴリ別にグループ化された結果を含むファイルがあります。たとえば、
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; }
}
配列を使用して「誤った結果」テーブルを作成できます。