Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 13/02/2018, à 17:53

Brunod

Extraire les lignes sans doublons dans chaque ligne d'un fichier

Bonjour,
J'ai un petit script qui m'indique en en-tête le nombre de page de chaque .pdf d'un répertoire (voir ci-dessous *).
Celui-ci me sort un fichier tel que ceci :

mardi 13 février 2018, 16:53:27 (UTC+0100)
96p Antide Janvier Recueil de Machines 96p 1828.pdf
63p Borsendorff Histoire DUne Montre 63p 1869.pdf
271p Collection_archéologique_du_prince_Pierre Soltykoff Pierre Dubois 271p 1858.pdf
325p De_la_mesure_du_temps Berthoud 325p 1787 PLANCHES PLIEES.pdf
327p De La Mesure Du Temps Berthoud 327p 1787 PLANCHES OK.pdf
57p De la mesure du temps et des moyens à employer pour conduire et régler les machines à cet usage H Combe 57p 1835.pdf
83p Description abregee d une horloge d une nouvelle invention Henry Sully 83p 1726.pdf
62p descriptiondelhorloge Astronomique CathedraleStrasbourg Alfred Ungerer 3Ed 1919.pdf
81p Description des échappements les plus usités en horlogerie Soc Arts 81p 1831.pdf
189p Éclaircissemens_sur_mesure du temps Berthoud 1773.pdf

J'aimerai pouvoir appliquer un filtre qui supprime les lignes qui contiennent deux fois le nombre de pages,  telles que
96p Antide Janvier Recueil de Machines 96p 1828.pdf
afin de repérer ceux qui ne contiennent pas le nombre (correct) de pages dans leur nom comme celle-ci
189p Éclaircissemens_sur_mesure du temps Berthoud 1773.pdf.
Je voudrais donc pour chaque nom/ligne supprimer ceux qui contiennent deux fois la séquence initiale précédant le premier espace (ce qui ne devrait pas avoir d'incidence sur la première ligne qui ne contiendra jamais qu'un jour pour débuter).

J'ai trouvé des exemples pour trier des lignes, mais pas pour des doublons au sein d'une ligne.
Merci de votre aide smile
BD

(*) Voici le script qui génère la liste, peut-être pas des plus propres mais fonctionnelle  :

#!/bin/bash
# V. 13/2/2018 Se lance avec arborescence/fichier.pdf à examiner

echo $(date) >_0rem-listpagespdf.txt
for i in *.pdf
do 
	echo -n $(pdfinfo "$i" | grep Pages | awk '{print $2}')>>_0rem-listpagespdf.txt
	echo "p $i" >>_0rem-listpagespdf.txt
done

Dernière modification par Brunod (Le 13/02/2018, à 17:54)


Windows est un système d'exploitation de l'homme par l'ordinateur. Linux, c'est le contraire...
39 pc linux convertis

Hors ligne

#2 Le 13/02/2018, à 18:25

pingouinux

Re : Extraire les lignes sans doublons dans chaque ligne d'un fichier

Bonjour Brunod,
Essaye ceci

sed -rn '/^([0-9]+p ).* \1/!p' fichier

Hors ligne

#3 Le 13/02/2018, à 19:13

MicP

Re : Extraire les lignes sans doublons dans chaque ligne d'un fichier

Bonsoir

En reprenant ton script,
Je me suis arrangé pour que la liste créée ne comporte que des noms de fichiers
dont le nombre de pages retourné par pdfinfo n'était pas déjà indiqué dans ce nom de fichier.

#!/bin/bash
# V. 13/2/2018 Se lance avec arborescence/fichier.pdf à examiner

echo $(date) >_0rem-listpagespdf.txt

for i in *.pdf
do
    nbPages=$(pdfinfo "${i}" | awk '/^Pages:/ {print $2"p"}')
    [[ "${i}" =~ "${nbPages}" ]] || echo "${nbPages} ${i}" >> _0rem-listpagespdf.txt
done

Mais peut-être que je n'ai pas très bien compris le but recherché…

Dernière modification par MicP (Le 13/02/2018, à 19:15)

Hors ligne

#4 Le 13/02/2018, à 19:42

Brunod

Re : Extraire les lignes sans doublons dans chaque ligne d'un fichier

Merci à vous deux ! 
Après vérification et test :
@MicP : C'est intéressant pour gagner une étape, mais j'ai aussi besoin de la liste qui sert d'entrée.
Parfait !
Merci à vous deux !
@pingouinux, encore merci pour cette fois mais surtout pour l'autre script sur les doublons. Juste pour te donner un retour, je viens de trier approximativement 12000 fiches avec ce système, je ne pourrais m'en passer smile


Windows est un système d'exploitation de l'homme par l'ordinateur. Linux, c'est le contraire...
39 pc linux convertis

Hors ligne

#5 Le 13/02/2018, à 20:25

MicP

Re : Extraire les lignes sans doublons dans chaque ligne d'un fichier

#!/bin/bash
# V. 13/2/2018 Se lance avec arborescence/fichier.pdf à examiner

echo $(date) tee _0rem-listpagespdf.txt _0rem-listpagesSansNbPagespdf.txt _0rem-listpagesAvecNbPagespdf.txt > /dev/null

for i in *.pdf
do
    nbPages=$(pdfinfo "${i}" | awk '/^Pages:/ {print $2"p"}')
    [[ "${i}" =~ "${nbPages}" ]] && { echo "${nbPages} ${i}" >> _0rem-listpagesAvecNbPagespdf.txt; } || { echo "${nbPages} ${i}" >> _0rem-listpagesSansNbPagespdf.txt; }
    echo "${nbPages} ${i}" >> _0rem-listpagespdf.txt
done

Avec ça, tu aura les trois :
_0rem-listpagespdf.txt <=> Liste de tous les noms de fichiers qui ont été traités
_0rem-listpagesSansNbPagespdf.txt <=> Liste des noms de fichiers fichiers qui n'avaient pas (ou pas le même que celui retourné par pdfinfo) le nombre de page dans leur nom
_0rem-listpagesAvecNbPagespdf.txt <=> Liste des noms de fichiers qui avaient le même nombre de pages que celui indiqué par pdfinfo dans leur nom

Dernière modification par MicP (Le 14/02/2018, à 02:48)

Hors ligne

#6 Le 13/02/2018, à 20:29

Brunod

Re : Extraire les lignes sans doublons dans chaque ligne d'un fichier

Merci ! smile
Bon j'y retourne, j'ai encore pas mal de répertoires à traiter tongue

Dernière modification par Brunod (Le 13/02/2018, à 20:30)


Windows est un système d'exploitation de l'homme par l'ordinateur. Linux, c'est le contraire...
39 pc linux convertis

Hors ligne

#7 Le 13/02/2018, à 21:24

Watael

Re : Extraire les lignes sans doublons dans chaque ligne d'un fichier

"{ça}" "{vous}" "{fatigue}" "{pas}" "{d}"'\''"{écrire}" "{des}" "{caractères}" "{inutiles}" "?"


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#8 Le 14/02/2018, à 02:04

MicP

Re : Extraire les lignes sans doublons dans chaque ligne d'un fichier

smile

Bonjour Watael

Je vais essayer de faire de mon mieux pour remédier à ça,
mais je me doute bien que ça ne sera pas non plus le mieux qu'on puisse faire.
(en plus, j'avais oublié des ";"  que je rajoute dans mon précédent message) hmm

#!/bin/bash
# V. 13/2/2018 Se lance avec arborescence/fichier.pdf à examiner

echo $(date) tee _0rem-listpagespdf.txt _0rem-listpagesSansNbPagespdf.txt _0rem-listpagesAvecNbPagespdf.txt > /dev/null

for i in *.pdf
do
    nbPages=$(pdfinfo "$i" | awk '/^Pages:/ {print $2"p"}')
    [[ "$i" =~ $nbPages ]] && { echo "$nbPages $i" >> _0rem-listpagesAvecNbPagespdf.txt; } || { echo "$nbPages $i" >> _0rem-listpagesSansNbPagespdf.txt; }
    echo "$nbPages $i" >> _0rem-listpagespdf.txt
done

Dernière modification par MicP (Le 14/02/2018, à 02:51)

Hors ligne