Tenho um arquivo RTF que contém uma lista de caminhos de arquivos PDF. Como
Category1:
./Folder1/Folder2/1.pdf:18
./Folder3/2.pdf:18
./Folder5/4.pdf:10
Category2:
./Folder3/2.pdf:18
./Folder5/4.pdf:10
Category3:
./Folder1/Folder2/1.pdf:18
./Folder5/4.pdf:10
Category4:
./Folder6/7.pdf:10
./Folder5/4.pdf:10
./Folder3/2.pdf:18
SideNote: O número num depois de *.pdf:num pode ser ignorado. O caminho completo da pasta também pode ser ignorado. A entidade de interesse é apenas o nome do arquivo.pdf
Gostaria de ter uma saída classificada com relação aos nomes de PDF e seu número de ocorrências
A saída estaria no formato (nome do arquivo: número de vezes que o arquivo apareceu no rtf), como:
4.pdf : 4
2.pdf : 3
Nota 2: Qualquer arquivo mencionado menos de 3 vezes pode ser ignorado.
Uma ferramenta possível é
awk
. Este comando pode fazer o trabalho:O script usa
/
como delimitador, entãosplit
noa
último campo com:
delimitador, conta nasb
ocorrências dea
. E no final imprime em loo todos os elementos dea
onde count é > 2É possível simplificar dividindo a linha usando delimitadores for
/
e:
. Nesse caso o script é:PS Se você quiser a soma dos valores
:
do arquivo de origem, você pode tentar algo como:Acabei de adicionar
c
uma matriz para somar os valores depois:
Usando Raku (anteriormente conhecido como Perl_6)
OU (mais simplesmente):
OU (ainda mais simplesmente):
Raku é uma linguagem de programação da família Perl. Usando os sinalizadores de linha de comando não autoimpressivos
awk
do tipo - do Raku-ne
, você pode obter um hash classificado de pares de chave/valor onde o valor por nome de arquivo PDF é igual à contagem do número de vezes que o nome do arquivo foi visto. A saída é classificada numericamente de acordo com o nome do arquivo (como um número). Usar.say
noEND
bloco fornecerá a você=>
uma saída "chave/valor" pareada:Exemplo de entrada:
Exemplo de saída:
Se você precisar de uma saída de "valor-chave" pareada
:
, altere oEND
bloco do seu código para:Se você precisar eliminar pares com
.value < 2
, altere ainda mais oEND
bloco do seu código para:Por fim, se você preferir um código escrito no estilo "encadeado" de chamada de método/função, o código abaixo fornece o mesmo código (desejado) que o acima:
https://raku.org
Extraia esse arquivo para ser um arquivo de TEXTO e faça
Com
perl
: