zeek/testing/scripts/diff-sort-conn-service
Jon Siwek 67835a6520 Extend external test suite canonifier with set-sorting logic
Two new canonifiers: one to sort the contents of conn.log "service"
field and another to sort the contents of any field of type "set".
2020-08-11 11:26:21 -07:00

62 lines
1.2 KiB
Bash
Executable file

#! /usr/bin/env bash
#
# A diff canonifier that sorts conn.log service field (it's derived from a set
# type and output may be unstable)
awk '
BEGIN {
FS="\t";
OFS="\t";
process = 0;
}
function bubble_sort(arr, len, keep_going, i, tmp)
{
keep_going = 1;
while ( keep_going == 1 )
{
keep_going = 0;
for ( i = 1; i <= len - 1; ++i )
{
if ( arr[i] > arr[i + 1] )
{
tmp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = tmp;
keep_going = 1;
}
}
}
return len;
}
$1 == "#path" && $2 == "conn" {
process = 1;
}
/^[^#]/ {
if ( process && column1 > 0 && $column1 != "-" )
{
n = split($column1, set_contents, ",");
n = bubble_sort(set_contents, n);
sorted_field = set_contents[1];
for ( e = 2; e <= n; ++e )
sorted_field = sorted_field "," set_contents[e];
$column1 = sorted_field;
}
}
/^#fields/ {
for ( i = 2; i <= NF; ++i ) {
if ( $i == "service" )
column1 = i - 1;
}
}
{ print }
'