сортировка с помощью awk
$ cat monk.txt
Jan 2 13:01:02 node1 app1: Some message I do not care2.
Jan 2 13:01:02 node1 app2: Some message I do not care13.
Jan 2 13:01:02 node1 app3: Some message I do not care9.
Jan 2 13:01:02 node1 app4: Some message I do not care4.
Jan 2 13:01:02 node2 app4: Some message I do not care11.
Jan 2 13:01:02 node1 app4: Some message I do not care8.
Jan 2 13:01:02 node1 app2: Some message I do not care10.
Jan 2 13:01:02 node2 app1: Some message I do not care5.
Jan 2 13:01:02 node1 app2: Some message I do not care3.
$ sort -k4 -k5 monk.txt | awk -F"[ :]" ' { c=$7;if(p!=c && NR>1){print p;for(i in a) print "\t" i,":",a[i];delete a }p=c;a[$9]++} END{ print p;for(i in a)print "\t" i,":",a[i]; } '
node1
app1 : 1
app2 : 3
app3 : 1
app4 : 2
node2
app1 : 1
app4 : 1
$
или упаковка обычного печатного кода в функцию
$ cat test.awk
function f1()
{
print p;
for(i in a) print "\t" i,":",a[i];
delete a
}
{ c=$7; if(p!=c && NR>1) { f1() } p=c;a[$9]++ }
END{ f1() }
$ sort -k4 -k5 monk.txt | gawk -F"[ :]" -f test.awk
node1
app1 : 1
app2 : 3
app3 : 1
app4 : 2
node2
app1 : 1
app4 : 1
$