Puedes probar con este awk
awk -F, '
function cvtdate( dat, array) {
split(dat,array,"/| |:")
array[4]=array[7]=="PM"?(array[4]+12):array[4]
return array[3]"-"array[1]"-"array[2]" "array[4]":"array[5]":"array[6]
}
{
$3=cvtdate($3)
$6=cvtdate($6)
}1' OFS=',' infile
Вы не можете получить аналогичный результат с GNUzgrep
(или OpenBSD zgrep
, если уж на то пошло, похоже, это характерно для zgrep
на FreeBSD и macOS ). Нет, если только вы не выполняете собственную -обработку результатов, что очень просто:
$ zgrep hello file*.gz | awk -F : 'NR > 1 && $1 != name { print "--" } { name = $1; print }'
file1.gz:hello world
--
file2.gz:hello world
--
file3.gz:hello world
--
file4.gz:hello world
--
file5.gz:hello world
Это передает вывод zgrep
через короткую программу awk
, которая будет вставлять разделитель всякий раз, когда изменяется бит имени файла в строке (перед первым битом :
).