легко найти файлы в соответствии со временем, которое вы предпочитаете. но для получения результата вы можете использовать awk
вот так:
awk -F\| '!/^\s*$/{if($4=="S:0"){Arr0[$1","$2","$3]+=1} else {Arr1[$1","$2","$3]+=1}}END{for(i in Arr1){print i,",",Arr0[i],",",Arr1[i]}}'
пояснение:
-Ф\| :определите |
как разделитель полей
!/^\s *$/ :пропустить пустые строки
if(Clause){Statement}else{statement}
:очистить
END{...}
:этот блок выполняется, когда оператор расширен до EOF
\x0a
— это не просто любое шестнадцатеричное значение -, это шестнадцатеричное значение, соответствующее символу перевода строки ASCII.
Поскольку grep по умолчанию основан на ()строке -, символы перевода строки удаляются перед сопоставлением с образцом. По крайней мере, с GNU grep вы можете изменить это поведение с помощью опции -z
:
-z, --null-data
Treat input and output data as sequences of lines, each
terminated by a zero byte (the ASCII NUL character) instead of a
newline.
однако обратите внимание, что это удалит нули ASCII, так что вы больше не сможете искать эти .