Melhor uso de awk
para contagem .
awk '
FNR == 1 {inside = 0}
$0 == "DONE" {
if (inside) print FILENAME, n
n = 0
inside = ! inside
next
}
inside {n++}' ./*.txt
Isso imprimirá um registro para cada seção DONE...DONE
em cada arquivo, o que significa que nada será impresso se não houver tal seção. Para imprimir 0
para esses, você precisaria da implementação GNU de awk
com suas declarações especiais BEGINFILE
, ENDFILE
:
awk '
BEGINFILE {DONE_count = 0}
$0 == "DONE" {
if (++DONE_count % 2 == 0) print FILENAME, n
n = 0
next
}
DONE_count % 2 {n++}
ENDFILE {if (!DONE_count) print FILENAME, 0}' ./*.txt
Ou execute um awk
por arquivo:
for file in ./*.txt; do
awk '
$0 == "DONE" {
if (++DONE_count % 2 == 0) print FILENAME, n
n = 0
next
}
DONE_count % 2 {n++}
END {if (!DONE_count) print FILENAME, 0}' "$file"
done