Como você deseja codificar a "classificação", faça o awk compilar os dados para cada bloco em uma matriz associativa e, em seguida, imprima essa matriz na ordem desejada:
scriptfile.awk
BEGIN {
FS=":"
}
/./ {
values[$1]=$0
}
/^$/ {
print values["loginName"]
print values["cabLoginID"]
print values["session"]
print values["userAgent"]
print values["sessionStartTime"]
print values["memoryInfo"]
print values["totalJSHeapSize"]
print values["usedJSHeapSize"]
print ""
delete values
}
END {
print values["loginName"]
print values["cabLoginID"]
print values["session"]
print values["userAgent"]
print values["sessionStartTime"]
print values["memoryInfo"]
print values["totalJSHeapSize"]
print values["usedJSHeapSize"]
}
Em seguida, execute:
awk -f scriptfile.awk < input
Como uma alternativa, se você não se importa em qual ordem as linhas de bloco estão, mas quer que elas ainda sejam ordenadas consistentemente, e você tem o GNU awk,
gnuscript.awk
BEGIN {
FS=":"
PROCINFO["sorted_in"]="@val_str_asc";
}
/./ {
values[$1]=$0
}
/^$/ {
asort(values)
for (element in values)
print values[element]
print ""
delete values
}
END {
asort(values)
for (element in values)
print values[element]
}
O script acima imprime as linhas de cada bloco em ordem alfabética:
cabLoginID:053XCDTF8D4J6PD3BG8P
loginName:jack
memoryInfo:jsHeapSizeLimit:2217857988
session:cabSessionID:052FPBP6Q6X2XGERWHBT
sessionStartTime:2018-10-01T01:04:10.899Z
totalJSHeapSize:42358792
usedJSHeapSize:36482584
userAgent:Mozilla/5.0
...