Conte as ocorrências de uma string em um arquivo

0

Eu tenho um arquivo como abaixo.

A      ctrl/bng/h2ert/scratch/TestAccountService.java
A      ctrl/bng/h2ert/scratch/TestAccount.java
A      ctrl/bng/h2ert/scratch/TestT.java
A      ctrl/bng/h2ert/scratch/TestAccountService.jpg
A      ctrl/bng/h2ert/scratch/TestService.txt
A      ctrl/bng/h2ert/scratch/TestAccountService.txt

Eu quero listar todos os nomes dos arquivos .java acima, como

Total java file 4

nome do arquivo

    
por deepu 05.05.2017 / 11:32

3 respostas

7

$ grep -c '\.java$' file
3

O sinal -c to grep fará com que ele informe o número de linhas na entrada que corresponde ao padrão.

O padrão \.java$ corresponderá a qualquer linha que termine com .java .

$ name="file"
$ printf 'Total number of Java files in "%s":\t%d\n' "$name" "$( grep -c -- '\.java$' "$name" )"
Total number of Java files in "file":   3

Ou mesmo apenas (com GNU grep ou compatível):

$ grep -Hc '\.java$' file
file:3

Ou (ainda com GNU grep ):

$ grep --label='Total java files in "file"' -Hc '\.java$' < file
Total java files in "file":3
    
por 05.05.2017 / 11:35
0
perl -lne '$a += s/\.java$//}{print"Total java file $ARGV: ", $a||0' java_file

O comando s/// retorna o número de substituições que são acumuladas em $a e o resultado é impresso no final. A expressão $a||0 é usada no caso de não haver .java a ser encontrada no final das linhas.

perl -lne '$a += /\.java$/}{print"Total java file $ARGV: ", $a||0' java_file

Desta vez, fazemos um teste não destrutivo para determinar a presença de .java. O resto dos detalhes é o mesmo.

    
por 05.05.2017 / 15:23
0

Apenas para o registro, o awk clássico de todos os tempos:

awk '/\.java$/{++c}END{print "Total java files:" c}' file

Se quiser imprimir também esses nomes de arquivos, você pode alterar {++c} para {print;++c} .

    
por 06.05.2017 / 01:43