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 06/04/2020, à 19:11

philoeil

[RESOLU] commande regex dans find dans AWK et getline incompris

bonjour,
Pouvez-vous m'aider à modifier la commande "getline" pour exclure du décompte le fichiers cachés ?

Dans un échange précédent ici :Question précedente

J'avais mis en oeuvre la correction avec succès.

J'ai un problème qui apparait du je pense à la présence de fichier caché dans les repertoires Rep2.2 et Rep2.1

phil@phil-G750JH:~/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep2/Rep2.2$ ls -a
 .    .directory                          'Fichier2.2__ 1_01_Introduction.mp3'
phil@phil-G750JH:~/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep2/Rep2.2$ 
phil@phil-G750JH:~/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep2/Rep2.1$ ls -a
 .   ..   .directory  'Fichier2.1__.01_Ena Ohi.mp3'  'Fichier2.1__.02_Otan Harazi.mp3'   FichierTexteBidon.txt
phil@phil-G750JH:~/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep2/Rep2.1$ 

LE résultat de mon code suivant décompte 1 fichier de trop dans ces 2 repertoires

awk -F' § ' 'BEGIN { print "Info3 : " }

{
	 if (/^\s*§+/) { next }
	 else

		 { NomRep[$1]=$1; NbRepDbl[$1]+=1
"find " NomRep[$1] " -maxdepth 1 -type f | wc -l" | getline NbDblonRep[$1]}
}

END { 
for ( Dblon in NbRepDbl) {
	printf("Repertoire doublon : %15s ===> %3d doublons sur %3s " , NomRep[Dblon] , NbRepDbl[Dblon] , NbDblonRep[Dblon] )
	print("fichiers \n")
}
}' $REP

A l'ecran s'affiche le décompte :

Ci-après la liste des noms des répertoires avec le nombre de doublons dans ce répertoire/nombre de fichiers présents, je suis ici /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons 
Info3 : 
Repertoire doublon : /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep1 ===>   6 doublons sur   7 fichiers 

Repertoire doublon : /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep2 ===>   6 doublons sur   9 fichiers 

Repertoire doublon : /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep2/Rep2.1 ===>   2 doublons sur   4 fichiers 

Repertoire doublon : /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep2/Rep2.2 ===>   2 doublons sur   3 fichiers 

Ce qui est juste pour Rep1 et Rep2  (dans lesquels il n'y a pas de fichier caché) et excessif de 1 pour Rep2.1 et Rep2.2

le fichier test $REP :

§§§§§§  Empreinte MD5 identique pour : 28a07d4c607ad7aee69583b110e3c6bf des fichiers suivants :
/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep1 §  Elisa Vellia_Voleur de Secrets_02_Otan Harazi.mp3
/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep2/Rep2.1 §  Fichier2.1__.02_Otan Harazi.mp3
/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep2 §  Rep2Elisa Vellia_Voleur de Secrets_02_Otan Harazi.mp3
§§§§§§  Empreinte MD5 identique pour : 3681351dbd8aab4ae94b010c02f02cce des fichiers suivants :
/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep2/Rep2.2 §  Fichier2.2__01_Gabriel's Oboe.mp3
/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep2 §  Rep2Platinum Collection Disc 1_01_Gabriel's Oboe.mp3
§§§§§§  Empreinte MD5 identique pour : 6a56c854a1f336468860bebc5033202b des fichiers suivants :
/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep1 §  Elisa Vellia_Voleur de Secrets_04_Voleur de Secrets.mp3
/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep2 §  Rep2Elisa Vellia_Voleur de Secrets_04_Voleur de Secrets.mp3
§§§§§§  Empreinte MD5 identique pour : a13a85c3b31e4c6b21c6dfcd0afcc7f0 des fichiers suivants :
/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep1 §  Elisa Vellia_Voleur de Secrets_08_Astrapse I Anatoli.mp3
/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep2 §  Rep2Elisa Vellia_Voleur de Secrets_08_Astrapse I Anatoli.mp3
§§§§§§  Empreinte MD5 identique pour : d17c9312f6b705f89ff4db625f379ac0 des fichiers suivants :
/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep1 §  Elisa Vellia_Voleur de Secrets_03_Le Chant de Yestimani.mp3
/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep2 §  Rep2Elisa Vellia_Voleur de Secrets_03_Le Chant de Yestimani.mp3
§§§§§§  Empreinte MD5 identique pour : d6eb958ed7ab196838f32f1de0717d8c des fichiers suivants :
/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep1 §  Elisa Vellia_Voleur de Secrets_01_Ena Ohi.mp3
/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep2/Rep2.1 §  Fichier2.1__.01_Ena Ohi.mp3
/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep2 §  Rep2Elisa Vellia_Voleur de Secrets_01_Ena Ohi.mp3
§§§§§§  Empreinte MD5 identique pour : fbaa78dcad8047d3f70a3e88aa326791 des fichiers suivants :
/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep1 §  Jimi Hendrix_Live at Woodstock Disc 1_01_Introduction.mp3
/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep2/Rep2.2 §  Fichier2.2__ 1_01_Introduction.mp3

Pouvez-vous m'aider à modifier la commande "getline" pour exclure du décompte le fichiers cachés ?

Merci

Dernière modification par philoeil (Le 07/04/2020, à 09:25)

Hors ligne

#2 Le 06/04/2020, à 19:46

Watael

Re : [RESOLU] commande regex dans find dans AWK et getline incompris

Pouvez-vous m'aider à modifier la commande "getline" pour exclure du décompte le fichiers cachés ?

non.

parce que ce n'est pas getline le problème, c'est find qui retourne la liste des fichiers (y compris, par défaut, les fichiers cachés) :

"find " NomRep[$1] " -maxdepth 1 -type f ! -name \".*\" | wc -l" | getline NbDblonRep[$1]}

un simple backslash suffira-t-il à protéger les guillemets, ou faudra-t-il les protéger aussi ?...

de toute façon, je ne vois pas de gain à utiliser awk de cette façon, vu qu'il y a aucune réelle opération sur le fichier; autant rester dans le shell.

EDIT: ajout de la négation de l'option -name

Dernière modification par Watael (Le 06/04/2020, à 21:43)


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

Hors ligne

#3 Le 06/04/2020, à 20:34

philoeil

Re : [RESOLU] commande regex dans find dans AWK et getline incompris

Bonjour,

Merci Watael,

Le fichier texte $Rep  représente le résultat d'une autre partie du programme donnant la liste des fichiers en doublons et leurs emplacements (repartis dans divers dossiers)
Comment alors en utilisant le resultat du fichier $REP Editer le résultat recherché soit le nombre de doublons par dossier /  le nombre total de fichiers (hors fichier caché)  ?
Merci

Hors ligne

#4 Le 06/04/2020, à 20:50

philoeil

Re : [RESOLU] commande regex dans find dans AWK et getline incompris

Bonjour,

La solution pourrait-elle être de ce genre là

J'ai testé ce code mais je tatonne et il y a une erreur :

"find " NomRep[$1] " -name\"[^.]*\" -maxdepth 1 -type f | wc -l" | getline NbDblonRep[$1]}

resultat :

Ci-après la liste des noms des répertoires avec le nombre de doublons dans ce répertoire/nombre de fichiers présents, je suis ici /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons 
Info3 : 
find: prédicat inconnu « -name[^.]* »
find: prédicat inconnu « -name[^.]* »
find: prédicat inconnu « -name[^.]* »
find: prédicat inconnu « -name[^.]* »
Repertoire doublon : /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep1 ===>   6 doublons sur   0 fichiers 

Repertoire doublon : /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep2 ===>   6 doublons sur   0 fichiers 

Repertoire doublon : /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep2/Rep2.1 ===>   2 doublons sur   0 fichiers 

Repertoire doublon : /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep2/Rep2.2 ===>   2 doublons sur   0 fichiers 

Merci de votre aide

Hors ligne

#5 Le 06/04/2020, à 21:20

Watael

Re : [RESOLU] commande regex dans find dans AWK et getline incompris

-name n'utilise pas de regex, mais le Développement des chemins du shell, et il faut un espace entre l'option et l'argument.


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

Hors ligne

#6 Le 06/04/2020, à 21:41

philoeil

Re : [RESOLU] commande regex dans find dans AWK et getline incompris

Bonjour,

JE n'ai pas tout compris, comment penses-tu faire sans regex ?

"find " " NomRep[$1] " -name "[^.]*" -maxdepth 1 -type f | wc -l" | getline NbDblonRep[$1]}
Ci-après la liste des noms des répertoires avec le nombre de doublons dans ce répertoire/nombre de fichiers présents, je suis ici /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons 
awk: ligne de commande:8: "find " " NomRep[$1] " -name "[^.]*" -maxdepth 1 -type f | wc -l" | getline NbDblonRep[$1]}
awk: ligne de commande:8:                                                            ^ syntax error
awk: ligne de commande:8: "find " " NomRep[$1] " -name "[^.]*" -maxdepth 1 -type f | wc -l" | getline NbDblonRep[$1]}
awk: ligne de commande:8:                                                                 ^ chaîne non refermée
awk: ligne de commande:8: "find " " NomRep[$1] " -name "[^.]*" -maxdepth 1 -type f | wc -l" | getline NbDblonRep[$1]}
awk: ligne de commande:8:                                                                 ^ syntax error

Merci

Hors ligne

#7 Le 06/04/2020, à 21:46

Watael

Re : [RESOLU] commande regex dans find dans AWK et getline incompris

-name est une option de find, et elle n'accepte pas les regex.

j'avais mal tapé la commande dans mon post précédent, je l'ai édité, mais je la remets ici :

"find "NomRep[$1]" ! -name \".*\" -maxdepth 1 -type f | wc -l" | getline NbDblonRep[$1]}

le point d'exclamation sert de négation.
le seul problème peut venir de la protection des guillemets pour que awk comprenne qu'ils ne sont pas pour lui. wink

Dernière modification par Watael (Le 06/04/2020, à 21:47)


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

Hors ligne

#8 Le 07/04/2020, à 09:23

philoeil

Re : [RESOLU] commande regex dans find dans AWK et getline incompris

Bonjour,
Merci Watael, cela  a marché après une petite modif :
Pour info 1er essai

find: attention : vous avez spécifié l'option -maxdepth après un argument qui n'est pas une option ! mais les options sont positionnelles (-maxdepth affecte les tests spécifiés avant aussi bien qu'après). SVP spécifiez les options avant les autres arguments.

find: attention : vous avez spécifié l'option -maxdepth après un argument qui n'est pas une option ! mais les options sont positionnelles (-maxdepth affecte les tests spécifiés avant aussi bien qu'après). SVP spécifiez les options avant les autres arguments.

find: attention : vous avez spécifié l'option -maxdepth après un argument qui n'est pas une option ! mais les options sont positionnelles (-maxdepth affecte les tests spécifiés avant aussi bien qu'après). SVP spécifiez les options avant les autres arguments.

find: attention : vous avez spécifié l'option -maxdepth après un argument qui n'est pas une option ! mais les options sont positionnelles (-maxdepth affecte les tests spécifiés avant aussi bien qu'après). SVP spécifiez les options avant les autres arguments.

Repertoire doublon : /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep1 ===>   6 doublons sur   7 fichiers 

Repertoire doublon : /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep2 ===>   6 doublons sur   9 fichiers 

Repertoire doublon : /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep2/Rep2.1 ===>   2 doublons sur   3 fichiers 

Repertoire doublon : /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep2/Rep2.2 ===>   2 doublons sur   2 fichiers 

Changement de l'instruction ainsi :

"find "NomRep[$1]" -maxdepth 1 ! -name \".*\" -type f | wc -l" | getline NbDblonRep[$1]}

Le resultat semble parfait :

Ci-après la liste des noms des répertoires avec le nombre de doublons dans ce répertoire/nombre de fichiers présents, je suis ici /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons 
Info3 : 
Repertoire doublon : /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep1 ===>   6 doublons sur   7 fichiers 

Repertoire doublon : /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep2 ===>   6 doublons sur   9 fichiers 

Repertoire doublon : /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep2/Rep2.1 ===>   2 doublons sur   3 fichiers 

Repertoire doublon : /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/Racine/Rep2/Rep2.2 ===>   2 doublons sur   2 fichiers 

Merci bien

Hors ligne