find . -name '*.txt' -type f -size +0 -exec awk -F '|' '
FNR == 1 {print FILENAME ": " NF; nextfile}' {} +
imprimiria algo como
./dir/foo.txt: 2
para cada arquivo normal não vazio cujo nome termina em .txt
, em que "2"
é o número de campos |
-separados na primeira linha do arquivo.
Observe que nextfile
não está disponível em todas as implementações de awk
, mas naquelas em que não é, deve ser inofensivo (apenas menos eficiente, pois awk
leria os arquivos totalmente).
Se você quiser considerar apenas os arquivos que possuem o mesmo número de colunas em todas as linhas não vazias, com o GNU awk
:
find . -name '*.txt' -type f -size +0 -exec awk -F '|' '
BEGINFILE {n = 0}
NF {
if (n && NF != n) {
print "skipping "FILENAME" ("NF" != "n")" > "/dev/stderr"
n = 0; nextfile
}
n = NF
}
ENDFILE {if (n) print FILENAME ": " n}' {} +