Problemas com o script original
Existem alguns problemas com o seu script. Primeiro de tudo, a primeira linha deve ser #!/usr/bin/awk -f
. Segundo você disse,
mas no seu script esta parte conta o número da linha em vez da contagem de arquivos, que também é redundante, porque o AWK tem NR
e FNR
variáveis que já fazem isso:
{
files++;
print files, "\t", $9, "\n", $3, "\n\n";
}
Abordagem de trabalho adequada
Tanto quanto eu entendo, seu principal requisito é imprimir contagem de linha em cada arquivo e imprimir o total de arquivos processados no diretório atual. Isso pode ser feito facilmente com o bash na linha de comando:
$ counter=0; for file in * ; do [ -f "$file" ] && [ -r "$file" ] && { wc -l "$file"; counter=$(($counter+1)); }; done ; echo "Total files:" "$counter"
45 center_active_window.py
41 get_terminal.py
91 typescript
1 xprop.txt
17 xrandr_script.py
Total files: 5
Se você insistir em fazer isso com o awk, também é possível, mas preste atenção - todos os arquivos no diretório devem ser arquivos de texto regulares e legíveis.
Abaixo está o script e sua amostra de execução:
$ cat ~/filecount.awk
#!/usr/bin/awk -f
FNR==1{
if (FNR!=NR){
print counter,last_file;
}
filecounter++;
last_file=ARGV[ARGIND];
counter=0
};
{counter++};
END{
print last_file,counter;
print "Files processed: ", filecounter;
}
$ ~/filecount.awk * 2> /dev/null
45 center_active_window.py
41 get_terminal.py
91 typescript
1 xprop.txt
xrandr_script.py 17
Files processed: 5
A ideia aqui é simples:
-
sempre que o número da linha no arquivo (a variável
FNR
) for 1, gravamos o nome do arquivo usando o array ARGV e a variável ARGIND. Incrementamos o contador de arquivos e definimos o número da linha como 0; -
se o número do registro não for o mesmo que o número do registro no arquivo atual , isso significa que já processamos pelo menos um arquivo, para que possamos imprimir as informações sobre ele . Isso é o que a parte
if (FNR!=NR){ . . .
faz -
Essencialmente, estamos processando o arquivo e, em seguida, analisando suas informações.
-
Depois de passarmos por todos os arquivos, precisamos imprimir informações sobre o último (porque lembre-se de que o script funciona olhando para trás em todos os itens) e, em seguida, imprimir o contador total de arquivos.