Я обрабатываю один файл, создавая два разных ассоциативных массива для подсчета частоты двух разных шаблонов (т. Е. Полей 3 и 6, когда они найдены).
Пример файла:
2019-06-20 : INFO : XYZ_6789 : [Command [cmd_zip_files]:] Standard output and error
2019-06-20 : INFO : ABC_1234 : License issue
Line with no timestamp
2019-06-20 : INFO : XYZ_6789 : [Command [cmd_zip_files]:] Standard output and error
2019-06-20 : INFO : ABC_1234 : License issue
Я хочу напечатать оба массива в конце, но их выходы перекрываются.
Я использую GNU Awk 4.1.3.
Я пытался использовать "next / continue«заявления, но они, кажется, не являются ответом.
Возможно, я неправильно использую правило END.
#!/usr/bin/env awk
BEGIN {
FS="\\)? : \\(?| \\| |[][]"
MSG_COL=3
CMD_COL=6
SEP="=================="
}
{
if (match ($MSG_COL, /^[A-Z]{3}_[0-9]+/))
msg_count[$MSG_COL]++
if ($MSG_COL == "XYZ_6789")
cmd_count[$CMD_COL]++
}
END {
print ">> Count of msg <<"
for (msg in msg_count)
if (msg_count[msg] > 0)
print msg_count[msg], msg | "sort -n"
print ">> Count of cmd <<"
for (cmd in cmd_count)
print cmd_count[cmd], cmd | "sort -n"
}
Я ожидаю, что мой код выдаст следующий вывод:
>> Count of msg <<
2 ABC_1234
2 XYZ_6789
>> Count of cmd <<
2 cmd_zip_files
Хотя,Я получаю это:
>> Count of msg <<
>> Count of cmd <<
2 ABC_1234
2 cmd_zip_files
2 XYZ_6789