SQLクエリからエクスポートされたデータをファイルに入れましたtemp.log
。
以下はサンプルデータです。ヘッダー行の後の項目は、最初の列に基づいてソートされます。
また、ノード(36,54,69,76)を固定リストと見なします。
<Name> <Status> <Node> <Requests>
AString1 Success 36 1
AString1 Success 54 4
AString1 Success 69 3
AString1 Success 76 4
BString2 Success 36 1
BString2 Success 54 2
BString2 Success 69 3
BString2 Success 76 1
CString3 Success 36 8
CString3 Success 54 7
CString3 Success 76 8
DString4 Success 36 8
DString4 Success 54 4
DString4 Success 69 12
DString4 Success 76 7
次の出力が必要です
<Name> <Nodes> <Count of Requests>
Astring1 36 54 69 76 12
BString2 36 54 69 76 7
CString3 36 54 NA 76 23
DString4 36 54 69 76 31
ここの最後の列(<Count of Requests>
)は、その名前の各ノードに対する要求の総数を表します。
NA
ノードが要求を受信しなかった場合は、この内容を印刷する必要があります。 (o / pでCString3行を見ることができます。ノード値の行がありません。この場合は、次のようにする必要があり69
ます。NA
CString3 36 54 NA 76 23
成功事例では、DString4 -DString4 36 54 69 76 31
awkコマンドを使用してこれを実行できますか?
ベストアンサー1
$ cat tst.awk
NR==1 {
print "<Name>", "<Nodes>", "<Count of Requests>"
next
}
$1 != prev {
if ( NR > 2 ) {
prt()
}
prev = $1
}
{
reqs[$3]
numReqs += $4
}
END { prt() }
function prt( i, n, node, nodes) {
n = split("36 54 69 76", nodes)
printf "%s ", prev
for (i=1; i<=n; i++) {
node = nodes[i]
printf "%s ", (node in reqs ? node : "NA")
}
print numReqs
delete reqs
numReqs = 0
}
$ awk -f tst.awk file
<Name> <Nodes> <Count of Requests>
AString1 36 54 69 76 12
BString2 36 54 69 76 7
CString3 36 54 NA 76 23
DString4 36 54 69 76 31