[bash] sort avec sortie grep résultat inattendu

Tags: #<Tag:0x00007f63f2151960>

Hello à tous,
Je rencontre un petit souci qui m’arrache les cheveux.


Ce que j'aimerais faire, c'est une recherche dans un répertoire (de manière récursive), sur un pattern dans de nombreux fichiers PDF, afin qu'il m'affiche les fichiers dans l'ordre décroissant avec le nombre d'occurrences les plus fortes en premier

find ~ -type f -name '*.pdf' -exec bash -c 'pdftotext "{}" - 2>/dev/null | grep -iH --label="$(basename "{}")" --color "pistache" 2>/dev/null' \;

Cette sortie m’affiche bien le nom des fichiers sans l’extension qui contienne le pattern choisi ‹ pistache › ici pour l’exemple
Jusque là c’est OK pour moi rien à signaler


Screen-Shot-2022-10-24-a-11-33-40
maintenant j'aimerais qu'il me compte les occurrences trouvées Je change donc en
find  -type f -name '*.pdf' -exec bash -c 'pdftotext "{}" - 2>/dev/null | grep -icH --label="$(basename "{}")" --color "pistache" 2>/dev/null' \;

Voila ce que ça donne


Screen-Shot-2022-10-24-a-10-51-45
Donc ça c'est ok aussi

Seulement j’aimerais trier par ordre décroissant et la rien y fait j’arrive pas

find ~ -type f -name '*.pdf' -exec bash -c 'pdftotext "{}" - 2>/dev/null | grep -icH --label="$(basename "{}")" --color "pistache" 2>/dev/null | sort -t: -k2 -rn '  \;

ne fonctionne pas , il ne me les trie pas


Screen-Shot-2022-10-24-a-12-03-17
j'ai essayé avec un cut comme ceci
find ~ -type f -name '*.pdf' -exec bash -c 'pdftotext "{}" - 2>/dev/null | grep -icH --label="$(basename "{}")" --color "pistache" 2>/dev/null | cut -d ":" -f2 ' \;

il me les coupe bien sans souci


Screen-Shot-2022-10-24-a-12-06-23

mais la encore si j’essai de trier ca ne fonctionne pas

find ~ -type f -name '*.pdf' -exec bash -c 'pdftotext "{}" - 2>/dev/null | grep -icH --label="$(basename "{}")" --color "pistache" 2>/dev/null | cut -d ":" -f2 | sort -rn ' \;


Screen-Shot-2022-10-24-a-12-09-22

Si vous aviez une piste ce serait sympa
Merci

Ca ne passe pas , fait un copier coller du résultat, l’image ce n’est pas terrible :slight_smile: utilise sort -r sans le -n

J’ai éditer correctement le post pour l’affichage des images
je me suis un peu embrouiller à la rédaction

:slight_smile: pour les images, bof :wink:

Bon bah j’ai réussi à le faire fonctionner mais par contre si une âme charitable pourrait m’expliquer pourquoi dans l’exec ça passe pas

find ~ -type f -name '*.pdf' -exec bash -c 'pdftotext "{}" - 2>/dev/null | grep -icH --label="$(basename "{}")" --color "pistache" 2>/dev/null ' \; | xargs -I % echo "%" |sort -t: -k2 -rn


Screen-Shot-2022-10-24-a-12-23-42
On voit ici que ça fonctionne j'avais pensé a xargs j'ai tester et c'est passé :-)

Bonjour,

Les images ne sont pas pratiques à lire, merci de faire un copier-coller et de les mettre dans des balises préformatées.
Les images sont beaucoup plus lourdes que le texte et réduisent l’accessibilité, évite donc de mettre des images à la place du texte, surtout quand tu peux faire un copier-coller.

La commande passée en argument à -exec est exécutée pour chaque fichier et ne concerne que celui-là, il n’y a donc rien à trier. Il faut trier la sortie globale de la commande find.

1 J'aime

:sweat_smile: