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 29/04/2020, à 21:15

philoeil

[RESOLU] AWK usage separateur de champs mal maitrisé

Bonjour,
Je ne parviens pas à comprendre l’usage du separateur de champs F et FS de AWK
J'ai fait 2 tests sans parvenir à avoir le résultat attendu

Fichier ActionDoublons.txt

§§§§§§  Empreinte MD5 identique pour : 0cbbff1c0f1c5bdc5ce8e2b8f483e560 des fichiers suivants :
Racine/Rep2.3DossierNormal § F2.3FichTexte1.txt
Racine/REPORIAvecFichierPb § FOri2_FichTexte1.txt
§§§§§§  Empreinte MD5 identique pour : 10a6ada757ec577d3a3db0654dd60a45 des fichiers suivants :
Racine § F2.CpBBID2_EspaceApresNef.nef 
Racine/Rep2.2 Espace Doublons  § F2.2 CpBBID2_EspaceApresNef.nef 
Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § F2.2.2.1 CpBBID2_EspaceApresNef.nef 
Racine/Rep2foisDblons § F2.X2.2.1 CpBBID2_EspaceApresNef.nef 
Racine/Rep2foisDblons § FOrig2.1 CpBBID2_EspaceApresNef.nef 
Racine/REPORIAvecFichierPb § FOrig2.1 CpBBID2_EspaceApresNef.nef 
§§§§§§  Empreinte MD5 identique pour : 93243bbb48aa8de88968bee06e6c8c9b des fichiers suivants :
Racine § F2BBID1_1 espaceApresJpg.jpg 
Racine/Rep2.2 Espace Doublons  § F2.2BID1_1espaceApresJpg.jpg 
Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § F2.2.2.1BBID1_1 espaceApresJpg.jpg 
Racine/Rep2foisDblons § F2.1X2_BBID1_1 espaceApresJpg.jpg 
Racine/Rep2foisDblons § FOri2.1BBID1_1 espaceApresJpg.jpg 
Racine/REPORIAvecFichierPb § FOri2.1BBID1_1 espaceApresJpg.jpg 
§§§§§§  Empreinte MD5 identique pour : d3fad710647642c327aceeec1b773a71 des fichiers suivants :
Racine § F2_F07 Fichier avec espaces.mp3
Racine/Rep2.2 Espace Doublons  § F2.2_F07 Fichier avec espaces.mp3
Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § F2.2.2.1_F07 Fichier avec espaces.mp3
Racine/REPORIAvecFichierPb § FOri2.1_F07 Fichier avec espaces.mp3
§§§§§§  Empreinte MD5 identique pour : f6638c0e380e1a9a89b026c2f33600f9 des fichiers suivants :
Racine/Rep2.2 Espace Doublons  § FichierTxt3.txt
Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § FichierTxt3.txt
Racine/Rep2.3DossierNormal § FichierTxt3.txt
Racine/REPORIAvecFichierPb § FOri2_FichierTxt3.txt

Test1 :
Code script Info3 :

#!/bin/bash
echo ---$0------------------------------------------ INFO 3---------------------------------------------------------
REP="/home/phil/ToutesSauvegardes/JournalSavTestSauvegarde/ActionDoublons.txt"

echo "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 $PWD "
awk 'BEGIN { print "Début de Info3 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< : "; FS=" § " }

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

		 { NomRep[$1]=$1; NbRepDbl[$1]+=1; printf ("NomRep " NomRep[$1] "--- Nbre Chps :" NF "---" $0" \n");
"find "NomRep[$1]" -maxdepth 1 ! -name \".*\" -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"

Resultat  le nombre de champs est bien de 2, mais il ne traite pas correctement find et le decompte pour les dossier avec des espaces dans le chemin de repertoires:

hil@phil-G750JH:~/Documents/JeCodeShell/TestAWK$ ./Info3.awk 
---./Info3.awk------------------------------------------ INFO 3---------------------------------------------------------
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/TestAWK 
Début de Info3 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< : 
NomRep Racine/Rep2.3DossierNormal--- Nbre Chps :2---Racine/Rep2.3DossierNormal § F2.3FichTexte1.txt 
NomRep Racine/REPORIAvecFichierPb--- Nbre Chps :2---Racine/REPORIAvecFichierPb § FOri2_FichTexte1.txt 
NomRep Racine--- Nbre Chps :2---Racine § F2.CpBBID2_EspaceApresNef.nef  
NomRep Racine/Rep2.2 Espace Doublons --- Nbre Chps :2---Racine/Rep2.2 Espace Doublons  § F2.2 CpBBID2_EspaceApresNef.nef  
find: ‘Racine/Rep2.2’: Aucun fichier ou dossier de ce type
find: ‘Espace’: Aucun fichier ou dossier de ce type
find: ‘Doublons’: Aucun fichier ou dossier de ce type
NomRep Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace--- Nbre Chps :2---Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § F2.2.2.1 CpBBID2_EspaceApresNef.nef  
find: ‘Racine/Rep2.2’: Aucun fichier ou dossier de ce type
find: ‘Espace’: Aucun fichier ou dossier de ce type
find: ‘Doublons’: Aucun fichier ou dossier de ce type
find: ‘/Rep2.2.2.1’: Aucun fichier ou dossier de ce type
find: ‘Doss’: Aucun fichier ou dossier de ce type
find: ‘Espace’: Aucun fichier ou dossier de ce type
NomRep Racine/Rep2foisDblons--- Nbre Chps :2---Racine/Rep2foisDblons § F2.X2.2.1 CpBBID2_EspaceApresNef.nef  
NomRep Racine/Rep2foisDblons--- Nbre Chps :2---Racine/Rep2foisDblons § FOrig2.1 CpBBID2_EspaceApresNef.nef  
NomRep Racine/REPORIAvecFichierPb--- Nbre Chps :2---Racine/REPORIAvecFichierPb § FOrig2.1 CpBBID2_EspaceApresNef.nef  
NomRep Racine--- Nbre Chps :2---Racine § F2BBID1_1 espaceApresJpg.jpg  
NomRep Racine/Rep2.2 Espace Doublons --- Nbre Chps :2---Racine/Rep2.2 Espace Doublons  § F2.2BID1_1espaceApresJpg.jpg  
NomRep Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace--- Nbre Chps :2---Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § F2.2.2.1BBID1_1 espaceApresJpg.jpg  
NomRep Racine/Rep2foisDblons--- Nbre Chps :2---Racine/Rep2foisDblons § F2.1X2_BBID1_1 espaceApresJpg.jpg  
NomRep Racine/Rep2foisDblons--- Nbre Chps :2---Racine/Rep2foisDblons § FOri2.1BBID1_1 espaceApresJpg.jpg  
NomRep Racine/REPORIAvecFichierPb--- Nbre Chps :2---Racine/REPORIAvecFichierPb § FOri2.1BBID1_1 espaceApresJpg.jpg  
NomRep Racine--- Nbre Chps :2---Racine § F2_F07 Fichier avec espaces.mp3 
NomRep Racine/Rep2.2 Espace Doublons --- Nbre Chps :2---Racine/Rep2.2 Espace Doublons  § F2.2_F07 Fichier avec espaces.mp3 
NomRep Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace--- Nbre Chps :2---Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § F2.2.2.1_F07 Fichier avec espaces.mp3 
NomRep Racine/REPORIAvecFichierPb--- Nbre Chps :2---Racine/REPORIAvecFichierPb § FOri2.1_F07 Fichier avec espaces.mp3 
NomRep Racine/Rep2.2 Espace Doublons --- Nbre Chps :2---Racine/Rep2.2 Espace Doublons  § FichierTxt3.txt 
NomRep Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace--- Nbre Chps :2---Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § FichierTxt3.txt 
NomRep Racine/Rep2.3DossierNormal--- Nbre Chps :2---Racine/Rep2.3DossierNormal § FichierTxt3.txt 
NomRep Racine/REPORIAvecFichierPb--- Nbre Chps :2---Racine/REPORIAvecFichierPb § FOri2_FichierTxt3.txt 
Repertoire doublon : Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace ===>   4 doublons sur   0 fichiers 

Repertoire doublon : Racine/Rep2.3DossierNormal ===>   2 doublons sur   3 fichiers 

Repertoire doublon : Racine/Rep2.2 Espace Doublons  ===>   4 doublons sur   0 fichiers 

Repertoire doublon :          Racine ===>   3 doublons sur   3 fichiers 

Repertoire doublon : Racine/REPORIAvecFichierPb ===>   5 doublons sur   6 fichiers 

Repertoire doublon : Racine/Rep2foisDblons ===>   4 doublons sur   4 fichiers 

phil@phil-G750JH:~/Documents/JeCodeShell/TestAWK$ 

second cas
Même fichier Ationdoublons.txt
Mon code :

#!/bin/bash
echo " ---------------------$0------------------------ INFO 3--------------------------------------------------------"
REP="/home/phil/ToutesSauvegardes/JournalSavTestSauvegarde/ActionDoublons.txt"

echo "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 $PWD "
awk -F[' § '] 'BEGIN { print "Début de Info3 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< : "; }

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

		 { NomRep[$1]=$1; NbRepDbl[$1]+=1; printf ("NomRep " NomRep[$1] "--- Nbre Chps :" NF "---" $0" \n");
"find "NomRep[$1]" -maxdepth 1 ! -name \".*\" -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"

Resultat : Le nombre de champs n'est plus de 2, le nombre de doublons est faux pour le chemin de dossier avec des espaces "Racine/Rep2.2 Espace Doublons  "

phil@phil-G750JH:~/Documents/JeCodeShell/TestAWK$ ./Info3_FS.awk 
 ---------------------./Info3_FS.awk------------------------ INFO 3--------------------------------------------------------
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/TestAWK 
Début de Info3 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< : 
NomRep Racine/Rep2.3DossierNormal--- Nbre Chps :4---Racine/Rep2.3DossierNormal § F2.3FichTexte1.txt 
NomRep Racine/REPORIAvecFichierPb--- Nbre Chps :4---Racine/REPORIAvecFichierPb § FOri2_FichTexte1.txt 
NomRep Racine--- Nbre Chps :5---Racine § F2.CpBBID2_EspaceApresNef.nef  
NomRep Racine/Rep2.2--- Nbre Chps :9---Racine/Rep2.2 Espace Doublons  § F2.2 CpBBID2_EspaceApresNef.nef  
find: ‘Racine/Rep2.2’: Aucun fichier ou dossier de ce type
NomRep Racine/Rep2.2--- Nbre Chps :11---Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § F2.2.2.1 CpBBID2_EspaceApresNef.nef  
NomRep Racine/Rep2foisDblons--- Nbre Chps :6---Racine/Rep2foisDblons § F2.X2.2.1 CpBBID2_EspaceApresNef.nef  
NomRep Racine/Rep2foisDblons--- Nbre Chps :6---Racine/Rep2foisDblons § FOrig2.1 CpBBID2_EspaceApresNef.nef  
NomRep Racine/REPORIAvecFichierPb--- Nbre Chps :6---Racine/REPORIAvecFichierPb § FOrig2.1 CpBBID2_EspaceApresNef.nef  
NomRep Racine--- Nbre Chps :6---Racine § F2BBID1_1 espaceApresJpg.jpg  
NomRep Racine/Rep2.2--- Nbre Chps :8---Racine/Rep2.2 Espace Doublons  § F2.2BID1_1espaceApresJpg.jpg  
NomRep Racine/Rep2.2--- Nbre Chps :11---Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § F2.2.2.1BBID1_1 espaceApresJpg.jpg  
NomRep Racine/Rep2foisDblons--- Nbre Chps :6---Racine/Rep2foisDblons § F2.1X2_BBID1_1 espaceApresJpg.jpg  
NomRep Racine/Rep2foisDblons--- Nbre Chps :6---Racine/Rep2foisDblons § FOri2.1BBID1_1 espaceApresJpg.jpg  
NomRep Racine/REPORIAvecFichierPb--- Nbre Chps :6---Racine/REPORIAvecFichierPb § FOri2.1BBID1_1 espaceApresJpg.jpg  
NomRep Racine--- Nbre Chps :7---Racine § F2_F07 Fichier avec espaces.mp3 
NomRep Racine/Rep2.2--- Nbre Chps :10---Racine/Rep2.2 Espace Doublons  § F2.2_F07 Fichier avec espaces.mp3 
NomRep Racine/Rep2.2--- Nbre Chps :12---Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § F2.2.2.1_F07 Fichier avec espaces.mp3 
NomRep Racine/REPORIAvecFichierPb--- Nbre Chps :7---Racine/REPORIAvecFichierPb § FOri2.1_F07 Fichier avec espaces.mp3 
NomRep Racine/Rep2.2--- Nbre Chps :7---Racine/Rep2.2 Espace Doublons  § FichierTxt3.txt 
NomRep Racine/Rep2.2--- Nbre Chps :9---Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § FichierTxt3.txt 
NomRep Racine/Rep2.3DossierNormal--- Nbre Chps :4---Racine/Rep2.3DossierNormal § FichierTxt3.txt 
NomRep Racine/REPORIAvecFichierPb--- Nbre Chps :4---Racine/REPORIAvecFichierPb § FOri2_FichierTxt3.txt 
Repertoire doublon : Racine/Rep2.3DossierNormal ===>   2 doublons sur   3 fichiers 

Repertoire doublon :   Racine/Rep2.2 ===>   8 doublons sur   0 fichiers 

Repertoire doublon :          Racine ===>   3 doublons sur   3 fichiers 

Repertoire doublon : Racine/REPORIAvecFichierPb ===>   5 doublons sur   6 fichiers 

Repertoire doublon : Racine/Rep2foisDblons ===>   4 doublons sur   4 fichiers 

phil@phil-G750JH:~/Documents/JeCodeShell/TestAWK$ 

Pouvez-vous m'aider à comprendre le problème ?

Merci bien

Dernière modification par philoeil (Le 30/04/2020, à 21:58)

Hors ligne

#2 Le 30/04/2020, à 00:28

kamaris

Re : [RESOLU] AWK usage separateur de champs mal maitrisé

find ne traite pas correctement les noms de répertoire avec des espaces, car tu ne les as pas protégés avec des guillemets.
Et comme tu appelles find depuis awk, ces guillemets doivent eux-mêmes être protégés par un antislash :

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

Concernant le séparateur de champs, le premier que tu as mis est le bon : FS=" § ".
Le second que tu as essayé n'est pas adapté au fichier d'entrée, mais en plus il est mal renseigné : c'est awk -F'[ § ]' (ou plus simplement awk -F'[ §]') et pas awk -F[' § '].
Il aurait aussi pu être renseigné dans la clause BEGIN, comme dans le premier cas : FS="[ §]".

Dernière chose : il vaut mieux éviter de nommer un script bash avec une extension .awk, qui devrait être réservée aux scripts awk.

Hors ligne

#3 Le 30/04/2020, à 11:25

philoeil

Re : [RESOLU] AWK usage separateur de champs mal maitrisé

Bonjour,

Merci beaucoup Kamaris
C'est parfait, J'aurai peut-être une autre question dans l'apres-midi.

Ta réponse m'inquiète sur une autre partie du code ou je n'avais pas détecté de problème et ou j'utilise -F[' § ']

Kamaris : a écrit :

Le second que tu as essayé n'est pas adapté au fichier d'entrée,

Dans quel cas on utilise le separateur de champs dans Begin et dans quel cas en 1er argument ?

Merci encore

Hors ligne

#4 Le 30/04/2020, à 15:26

kamaris

Re : [RESOLU] AWK usage separateur de champs mal maitrisé

Il se trouve que, par l'interprétation que le shell fait des différents caractères, awk -F[' § '] et awk -F'[ § ]' sont équivalents.
Mais à la lecture, on voit que ce que tu veux signifier correspond à awk -F'[ § ]' : on passe à awk l'expression régulière [ § ], placée entre guillemets simples, pour la protéger de toute interprétation par le shell.
Et encore une fois, la bonne écriture serait en fait awk -F'[ §]' (le second espace est inutile).

philoeil a écrit :

Dans quel cas on utilise le separateur de champs dans Begin et dans quel cas en 1er argument ?

L'un et l'autre sont équivalents, c'est une question de gout.
Ce sont les expressions régulières ' § ' et [ § ] qui ne sont pas équivalentes.
La première correspond simplement à la chaine ' § ', tandis que la seconde signifie « un caractère parmi espace, § ou espace ».
D'où le fait que la seconde est équivalente à [ §] : « un caractère parmi espace ou § ».

Hors ligne

#5 Le 30/04/2020, à 15:36

philoeil

Re : [RESOLU] AWK usage separateur de champs mal maitrisé

Bonjour,

Et Merci encore beaucoup Kamaris c'est super clair, j'ai (cru avoir) tout compris smile

Au plaisir de te lire

Je modifie mon poste précédent pour enfin (peut-être) comprendre :

Kamaris a écrit :

philoeil a écrit :

    Dans quel cas on utilise le separateur de champs dans Begin et dans quel cas en 1er argument ?

L'un et l'autre sont équivalents, c'est une question de gout.

J'ai fait le test suivant pour valider l'explication et ma compréhension de celle-ci, malheureusement cela n'est pas équivalent (dans mes résultats) :

Code correct

#!/bin/bash
echo " ---------------------$0------------------------ INFO 4-Find appostrophe doublés- -begin FS=" § " ------"
REP="/home/phil/ToutesSauvegardes/JournalSavTestSauvegarde/ActionDoublons.txt"
RepSource="/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons"
# --------------------------------------------- INFO 4 ---------------------------------------------------------
echo '$RepSource='"$RepSource"
echo 'REP='"$REP"
awk -v RepSource==\$RepSource 'BEGIN { print "-----------------------------------------------------Début de Info4 : "; FS=" § " }
{
	 if (/^\s*§+/) { next }
	 else
		 	 printf ("la variable $1 est actuellement  : ") $1;


		 { NomRep[$1]=$1; NbRepDbl[$1]+=1; printf ("NomRep " NomRep[$1] "--- Nbre Chps :" NF "---" $0" \n");
 
"find \""NomRep[$1]"\" -maxdepth 1 ! -name \".*\" -type f | wc -l" | getline NbDblonRep[$1]};

print("RepsSourceVariable :"$RepSource, "NbRepDbl : " NbRepDbl[$1]);

}
END { 
for ( Dblon in NbRepDbl) {
	if (NbDblonRep[Dblon]/NbRepDbl[Dblon]==1)
		{ #print($RepSource);
		printf ("Ci-après la liste des noms des répertoires sélectionnés comme supprimables automatiquement, création du fichier SupprimerCPCent.txt  Lancement  édition ")> "SupprimerCPCent.txt"; 

		printf ("ASupprimer : \n" )>> "SupprimerCPCent.txt";
		
printf("Repertoire doublon : %15s ===> %3d doublons sur %3s \n" , NomRep[Dblon] , NbRepDbl[Dblon] , NbDblonRep[Dblon] )>> "SupprimerCPCent.txt"; 
}
}
}' "$REP"

Resultat correct :

phil@phil-G750JH:~/Documents/JeCodeShell/TestAWK$ ./Info4.awk 
 ---------------------./Info4.awk------------------------ INFO 4-Find appostrophe doublés- -begin FS= §  ------
$RepSource=/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons
REP=/home/phil/ToutesSauvegardes/JournalSavTestSauvegarde/ActionDoublons.txt
-----------------------------------------------------Début de Info4 : 
la variable $1 est actuellement  : Racine/Rep2.3DossierNormalNomRep Racine/Rep2.3DossierNormal--- Nbre Chps :2---Racine/Rep2.3DossierNormal § F2.3FichTexte1.txt 
RepsSourceVariable :Racine/Rep2.3DossierNormal § F2.3FichTexte1.txt NbRepDbl : 1
la variable $1 est actuellement  : Racine/REPORIAvecFichierPbNomRep Racine/REPORIAvecFichierPb--- Nbre Chps :2---Racine/REPORIAvecFichierPb § FOri2_FichTexte1.txt 
RepsSourceVariable :Racine/REPORIAvecFichierPb § FOri2_FichTexte1.txt NbRepDbl : 1
la variable $1 est actuellement  : RacineNomRep Racine--- Nbre Chps :2---Racine § F2.CpBBID2_EspaceApresNef.nef  
RepsSourceVariable :Racine § F2.CpBBID2_EspaceApresNef.nef  NbRepDbl : 1
la variable $1 est actuellement  : Racine/Rep2.2 Espace Doublons NomRep Racine/Rep2.2 Espace Doublons --- Nbre Chps :2---Racine/Rep2.2 Espace Doublons  § F2.2 CpBBID2_EspaceApresNef.nef  
RepsSourceVariable :Racine/Rep2.2 Espace Doublons  § F2.2 CpBBID2_EspaceApresNef.nef  NbRepDbl : 1
la variable $1 est actuellement  : Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss EspaceNomRep Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace--- Nbre Chps :2---Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § F2.2.2.1 CpBBID2_EspaceApresNef.nef  
RepsSourceVariable :Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § F2.2.2.1 CpBBID2_EspaceApresNef.nef  NbRepDbl : 1
la variable $1 est actuellement  : Racine/Rep2foisDblonsNomRep Racine/Rep2foisDblons--- Nbre Chps :2---Racine/Rep2foisDblons § F2.X2.2.1 CpBBID2_EspaceApresNef.nef  
RepsSourceVariable :Racine/Rep2foisDblons § F2.X2.2.1 CpBBID2_EspaceApresNef.nef  NbRepDbl : 1
la variable $1 est actuellement  : Racine/Rep2foisDblonsNomRep Racine/Rep2foisDblons--- Nbre Chps :2---Racine/Rep2foisDblons § FOrig2.1 CpBBID2_EspaceApresNef.nef  
RepsSourceVariable :Racine/Rep2foisDblons § FOrig2.1 CpBBID2_EspaceApresNef.nef  NbRepDbl : 2
la variable $1 est actuellement  : Racine/REPORIAvecFichierPbNomRep Racine/REPORIAvecFichierPb--- Nbre Chps :2---Racine/REPORIAvecFichierPb § FOrig2.1 CpBBID2_EspaceApresNef.nef  
RepsSourceVariable :Racine/REPORIAvecFichierPb § FOrig2.1 CpBBID2_EspaceApresNef.nef  NbRepDbl : 2
la variable $1 est actuellement  : RacineNomRep Racine--- Nbre Chps :2---Racine § F2BBID1_1 espaceApresJpg.jpg  
RepsSourceVariable :Racine § F2BBID1_1 espaceApresJpg.jpg  NbRepDbl : 2
la variable $1 est actuellement  : Racine/Rep2.2 Espace Doublons NomRep Racine/Rep2.2 Espace Doublons --- Nbre Chps :2---Racine/Rep2.2 Espace Doublons  § F2.2BID1_1espaceApresJpg.jpg  
RepsSourceVariable :Racine/Rep2.2 Espace Doublons  § F2.2BID1_1espaceApresJpg.jpg  NbRepDbl : 2
la variable $1 est actuellement  : Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss EspaceNomRep Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace--- Nbre Chps :2---Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § F2.2.2.1BBID1_1 espaceApresJpg.jpg  
RepsSourceVariable :Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § F2.2.2.1BBID1_1 espaceApresJpg.jpg  NbRepDbl : 2
la variable $1 est actuellement  : Racine/Rep2foisDblonsNomRep Racine/Rep2foisDblons--- Nbre Chps :2---Racine/Rep2foisDblons § F2.1X2_BBID1_1 espaceApresJpg.jpg  
RepsSourceVariable :Racine/Rep2foisDblons § F2.1X2_BBID1_1 espaceApresJpg.jpg  NbRepDbl : 3
la variable $1 est actuellement  : Racine/Rep2foisDblonsNomRep Racine/Rep2foisDblons--- Nbre Chps :2---Racine/Rep2foisDblons § FOri2.1BBID1_1 espaceApresJpg.jpg  
RepsSourceVariable :Racine/Rep2foisDblons § FOri2.1BBID1_1 espaceApresJpg.jpg  NbRepDbl : 4
la variable $1 est actuellement  : Racine/REPORIAvecFichierPbNomRep Racine/REPORIAvecFichierPb--- Nbre Chps :2---Racine/REPORIAvecFichierPb § FOri2.1BBID1_1 espaceApresJpg.jpg  
RepsSourceVariable :Racine/REPORIAvecFichierPb § FOri2.1BBID1_1 espaceApresJpg.jpg  NbRepDbl : 3
la variable $1 est actuellement  : RacineNomRep Racine--- Nbre Chps :2---Racine § F2_F07 Fichier avec espaces.mp3 
RepsSourceVariable :Racine § F2_F07 Fichier avec espaces.mp3 NbRepDbl : 3
la variable $1 est actuellement  : Racine/Rep2.2 Espace Doublons NomRep Racine/Rep2.2 Espace Doublons --- Nbre Chps :2---Racine/Rep2.2 Espace Doublons  § F2.2_F07 Fichier avec espaces.mp3 
RepsSourceVariable :Racine/Rep2.2 Espace Doublons  § F2.2_F07 Fichier avec espaces.mp3 NbRepDbl : 3
la variable $1 est actuellement  : Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss EspaceNomRep Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace--- Nbre Chps :2---Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § F2.2.2.1_F07 Fichier avec espaces.mp3 
RepsSourceVariable :Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § F2.2.2.1_F07 Fichier avec espaces.mp3 NbRepDbl : 3
la variable $1 est actuellement  : Racine/REPORIAvecFichierPbNomRep Racine/REPORIAvecFichierPb--- Nbre Chps :2---Racine/REPORIAvecFichierPb § FOri2.1_F07 Fichier avec espaces.mp3 
RepsSourceVariable :Racine/REPORIAvecFichierPb § FOri2.1_F07 Fichier avec espaces.mp3 NbRepDbl : 4
la variable $1 est actuellement  : Racine/Rep2.2 Espace Doublons NomRep Racine/Rep2.2 Espace Doublons --- Nbre Chps :2---Racine/Rep2.2 Espace Doublons  § FichierTxt3.txt 
RepsSourceVariable :Racine/Rep2.2 Espace Doublons  § FichierTxt3.txt NbRepDbl : 4
la variable $1 est actuellement  : Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss EspaceNomRep Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace--- Nbre Chps :2---Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § FichierTxt3.txt 
RepsSourceVariable :Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § FichierTxt3.txt NbRepDbl : 4
la variable $1 est actuellement  : Racine/Rep2.3DossierNormalNomRep Racine/Rep2.3DossierNormal--- Nbre Chps :2---Racine/Rep2.3DossierNormal § FichierTxt3.txt 
RepsSourceVariable :Racine/Rep2.3DossierNormal § FichierTxt3.txt NbRepDbl : 2
la variable $1 est actuellement  : Racine/REPORIAvecFichierPbNomRep Racine/REPORIAvecFichierPb--- Nbre Chps :2---Racine/REPORIAvecFichierPb § FOri2_FichierTxt3.txt 
RepsSourceVariable :Racine/REPORIAvecFichierPb § FOri2_FichierTxt3.txt NbRepDbl : 5
phil@phil-G750JH:~/Documents/JeCodeShell/TestAWK$ 

Essai non concluant
code :

#!/bin/bash
echo " ---------------------$0------------------------ INFO 4-Find appostrophe doublés- -F=[' § '] ------"
REP="/home/phil/ToutesSauvegardes/JournalSavTestSauvegarde/ActionDoublons.txt"
RepSource="/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons"
# --------------------------------------------- INFO 4 bis ---------------------------------------------------------
echo '$RepSource='"$RepSource"
echo 'REP='"$REP"
awk -F[' § '] -v RepSource==\$RepSource 'BEGIN { print "-----------------------------------------------------Début de Info4 : "; }
{
	 if (/^\s*§+/) { next }
	 else
		 	 printf ("la variable $1 est actuellement  : ") $1;


		 { NomRep[$1]=$1; NbRepDbl[$1]+=1; printf ("NomRep " NomRep[$1] "--- Nbre Chps :" NF "---" $0" \n");
  
"find \""NomRep[$1]"\" -maxdepth 1 ! -name \".*\" -type f | wc -l" | getline NbDblonRep[$1]};

print("RepsSourceVariable :"$RepSource, "NbRepDbl : " NbRepDbl[$1]);

}
END { 
for ( Dblon in NbRepDbl) {
	if (NbDblonRep[Dblon]/NbRepDbl[Dblon]==1)
		{ #print($RepSource);
		printf ("Ci-après la liste des noms des répertoires sélectionnés comme supprimables automatiquement, création du fichier SupprimerCPCent.txt  Lancement  édition ")> "SupprimerCPCent.txt"; 

		printf ("ASupprimer : \n" )>> "SupprimerCPCent.txt";
		
printf("Repertoire doublon : %15s ===> %3d doublons sur %3s \n" , NomRep[Dblon] , NbRepDbl[Dblon] , NbDblonRep[Dblon] )>> "SupprimerCPCent.txt"; 
}
}
}' "$REP"

Resultat non concluant (Qui me surprend puisque ESPACE§ESPACE est ma sequence de caracteres separant mes champs)

phil@phil-G750JH:~/Documents/JeCodeShell/TestAWK$ ./Info4Bis.awk 
 ---------------------./Info4Bis.awk------------------------ INFO 4-Find appostrophe doublés- -F=[' § '] ------
$RepSource=/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons
REP=/home/phil/ToutesSauvegardes/JournalSavTestSauvegarde/ActionDoublons.txt
-----------------------------------------------------Début de Info4 : 
la variable $1 est actuellement  : Racine/Rep2.3DossierNormalNomRep Racine/Rep2.3DossierNormal--- Nbre Chps :4---Racine/Rep2.3DossierNormal § F2.3FichTexte1.txt 
RepsSourceVariable :Racine/Rep2.3DossierNormal § F2.3FichTexte1.txt NbRepDbl : 1
la variable $1 est actuellement  : Racine/REPORIAvecFichierPbNomRep Racine/REPORIAvecFichierPb--- Nbre Chps :4---Racine/REPORIAvecFichierPb § FOri2_FichTexte1.txt 
RepsSourceVariable :Racine/REPORIAvecFichierPb § FOri2_FichTexte1.txt NbRepDbl : 1
la variable $1 est actuellement  : RacineNomRep Racine--- Nbre Chps :5---Racine § F2.CpBBID2_EspaceApresNef.nef  
RepsSourceVariable :Racine § F2.CpBBID2_EspaceApresNef.nef  NbRepDbl : 1
la variable $1 est actuellement  : Racine/Rep2.2NomRep Racine/Rep2.2--- Nbre Chps :9---Racine/Rep2.2 Espace Doublons  § F2.2 CpBBID2_EspaceApresNef.nef  
find: ‘Racine/Rep2.2’: Aucun fichier ou dossier de ce type
RepsSourceVariable :Racine/Rep2.2 Espace Doublons  § F2.2 CpBBID2_EspaceApresNef.nef  NbRepDbl : 1
la variable $1 est actuellement  : Racine/Rep2.2NomRep Racine/Rep2.2--- Nbre Chps :11---Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § F2.2.2.1 CpBBID2_EspaceApresNef.nef  
RepsSourceVariable :Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § F2.2.2.1 CpBBID2_EspaceApresNef.nef  NbRepDbl : 2
la variable $1 est actuellement  : Racine/Rep2foisDblonsNomRep Racine/Rep2foisDblons--- Nbre Chps :6---Racine/Rep2foisDblons § F2.X2.2.1 CpBBID2_EspaceApresNef.nef  
RepsSourceVariable :Racine/Rep2foisDblons § F2.X2.2.1 CpBBID2_EspaceApresNef.nef  NbRepDbl : 1
la variable $1 est actuellement  : Racine/Rep2foisDblonsNomRep Racine/Rep2foisDblons--- Nbre Chps :6---Racine/Rep2foisDblons § FOrig2.1 CpBBID2_EspaceApresNef.nef  
RepsSourceVariable :Racine/Rep2foisDblons § FOrig2.1 CpBBID2_EspaceApresNef.nef  NbRepDbl : 2
la variable $1 est actuellement  : Racine/REPORIAvecFichierPbNomRep Racine/REPORIAvecFichierPb--- Nbre Chps :6---Racine/REPORIAvecFichierPb § FOrig2.1 CpBBID2_EspaceApresNef.nef  
RepsSourceVariable :Racine/REPORIAvecFichierPb § FOrig2.1 CpBBID2_EspaceApresNef.nef  NbRepDbl : 2
la variable $1 est actuellement  : RacineNomRep Racine--- Nbre Chps :6---Racine § F2BBID1_1 espaceApresJpg.jpg  
RepsSourceVariable :Racine § F2BBID1_1 espaceApresJpg.jpg  NbRepDbl : 2
la variable $1 est actuellement  : Racine/Rep2.2NomRep Racine/Rep2.2--- Nbre Chps :8---Racine/Rep2.2 Espace Doublons  § F2.2BID1_1espaceApresJpg.jpg  
RepsSourceVariable :Racine/Rep2.2 Espace Doublons  § F2.2BID1_1espaceApresJpg.jpg  NbRepDbl : 3
la variable $1 est actuellement  : Racine/Rep2.2NomRep Racine/Rep2.2--- Nbre Chps :11---Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § F2.2.2.1BBID1_1 espaceApresJpg.jpg  
RepsSourceVariable :Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § F2.2.2.1BBID1_1 espaceApresJpg.jpg  NbRepDbl : 4
la variable $1 est actuellement  : Racine/Rep2foisDblonsNomRep Racine/Rep2foisDblons--- Nbre Chps :6---Racine/Rep2foisDblons § F2.1X2_BBID1_1 espaceApresJpg.jpg  
RepsSourceVariable :Racine/Rep2foisDblons § F2.1X2_BBID1_1 espaceApresJpg.jpg  NbRepDbl : 3
la variable $1 est actuellement  : Racine/Rep2foisDblonsNomRep Racine/Rep2foisDblons--- Nbre Chps :6---Racine/Rep2foisDblons § FOri2.1BBID1_1 espaceApresJpg.jpg  
RepsSourceVariable :Racine/Rep2foisDblons § FOri2.1BBID1_1 espaceApresJpg.jpg  NbRepDbl : 4
la variable $1 est actuellement  : Racine/REPORIAvecFichierPbNomRep Racine/REPORIAvecFichierPb--- Nbre Chps :6---Racine/REPORIAvecFichierPb § FOri2.1BBID1_1 espaceApresJpg.jpg  
RepsSourceVariable :Racine/REPORIAvecFichierPb § FOri2.1BBID1_1 espaceApresJpg.jpg  NbRepDbl : 3
la variable $1 est actuellement  : RacineNomRep Racine--- Nbre Chps :7---Racine § F2_F07 Fichier avec espaces.mp3 
RepsSourceVariable :Racine § F2_F07 Fichier avec espaces.mp3 NbRepDbl : 3
la variable $1 est actuellement  : Racine/Rep2.2NomRep Racine/Rep2.2--- Nbre Chps :10---Racine/Rep2.2 Espace Doublons  § F2.2_F07 Fichier avec espaces.mp3 
RepsSourceVariable :Racine/Rep2.2 Espace Doublons  § F2.2_F07 Fichier avec espaces.mp3 NbRepDbl : 5
la variable $1 est actuellement  : Racine/Rep2.2NomRep Racine/Rep2.2--- Nbre Chps :12---Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § F2.2.2.1_F07 Fichier avec espaces.mp3 
RepsSourceVariable :Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § F2.2.2.1_F07 Fichier avec espaces.mp3 NbRepDbl : 6
la variable $1 est actuellement  : Racine/REPORIAvecFichierPbNomRep Racine/REPORIAvecFichierPb--- Nbre Chps :7---Racine/REPORIAvecFichierPb § FOri2.1_F07 Fichier avec espaces.mp3 
RepsSourceVariable :Racine/REPORIAvecFichierPb § FOri2.1_F07 Fichier avec espaces.mp3 NbRepDbl : 4
la variable $1 est actuellement  : Racine/Rep2.2NomRep Racine/Rep2.2--- Nbre Chps :7---Racine/Rep2.2 Espace Doublons  § FichierTxt3.txt 
RepsSourceVariable :Racine/Rep2.2 Espace Doublons  § FichierTxt3.txt NbRepDbl : 7
la variable $1 est actuellement  : Racine/Rep2.2NomRep Racine/Rep2.2--- Nbre Chps :9---Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § FichierTxt3.txt 
RepsSourceVariable :Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § FichierTxt3.txt NbRepDbl : 8
la variable $1 est actuellement  : Racine/Rep2.3DossierNormalNomRep Racine/Rep2.3DossierNormal--- Nbre Chps :4---Racine/Rep2.3DossierNormal § FichierTxt3.txt 
RepsSourceVariable :Racine/Rep2.3DossierNormal § FichierTxt3.txt NbRepDbl : 2
la variable $1 est actuellement  : Racine/REPORIAvecFichierPbNomRep Racine/REPORIAvecFichierPb--- Nbre Chps :4---Racine/REPORIAvecFichierPb § FOri2_FichierTxt3.txt 
RepsSourceVariable :Racine/REPORIAvecFichierPb § FOri2_FichierTxt3.txt NbRepDbl : 5
phil@phil-G750JH:~/Documents/JeCodeShell/TestAWK$

Code 3 non concluant

#!/bin/bash
echo " ---------------------$0------------------------ INFO 4-Find appostrophe doublés- -F='[ § ]' ------"
REP="/home/phil/ToutesSauvegardes/JournalSavTestSauvegarde/ActionDoublons.txt"
RepSource="/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons"
# --------------------------------------------- INFO 4 TRI ---------------------------------------------------------
echo '$RepSource='"$RepSource"
echo 'REP='"$REP"
awk -F'[ § ]' -v RepSource==\$RepSource 'BEGIN { print "-----------------------------------------------------Début de Info4 : "; }
{
	 if (/^\s*§+/) { next }
	 else
		 	 printf ("la variable $1 est actuellement  : ") $1;


		 { NomRep[$1]=$1; NbRepDbl[$1]+=1; printf ("NomRep " NomRep[$1] "--- Nbre Chps :" NF "---" $0" \n");
  
"find \""NomRep[$1]"\" -maxdepth 1 ! -name \".*\" -type f | wc -l" | getline NbDblonRep[$1]};

print("RepsSourceVariable :"$RepSource, "NbRepDbl : " NbRepDbl[$1]);

}
END { 
for ( Dblon in NbRepDbl) {
	if (NbDblonRep[Dblon]/NbRepDbl[Dblon]==1)
		{ #print($RepSource);
		printf ("Ci-après la liste des noms des répertoires sélectionnés comme supprimables automatiquement, création du fichier SupprimerCPCent.txt  Lancement  édition ")> "SupprimerCPCent.txt"; 

		printf ("ASupprimer : \n" )>> "SupprimerCPCent.txt";
		
printf("Repertoire doublon : %15s ===> %3d doublons sur %3s \n" , NomRep[Dblon] , NbRepDbl[Dblon] , NbDblonRep[Dblon] )>> "SupprimerCPCent.txt"; 
}
}
}' "$REP"

Resultat 3 non concluant (qui me semblait logiquement non concluant)

phil@phil-G750JH:~/Documents/JeCodeShell/TestAWK$ ./Info4Tri.awk 
 ---------------------./Info4Tri.awk------------------------ INFO 4-Find appostrophe doublés- -F='[ § ]' ------
$RepSource=/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons
REP=/home/phil/ToutesSauvegardes/JournalSavTestSauvegarde/ActionDoublons.txt
-----------------------------------------------------Début de Info4 : 
la variable $1 est actuellement  : Racine/Rep2.3DossierNormalNomRep Racine/Rep2.3DossierNormal--- Nbre Chps :4---Racine/Rep2.3DossierNormal § F2.3FichTexte1.txt 
RepsSourceVariable :Racine/Rep2.3DossierNormal § F2.3FichTexte1.txt NbRepDbl : 1
la variable $1 est actuellement  : Racine/REPORIAvecFichierPbNomRep Racine/REPORIAvecFichierPb--- Nbre Chps :4---Racine/REPORIAvecFichierPb § FOri2_FichTexte1.txt 
RepsSourceVariable :Racine/REPORIAvecFichierPb § FOri2_FichTexte1.txt NbRepDbl : 1
la variable $1 est actuellement  : RacineNomRep Racine--- Nbre Chps :5---Racine § F2.CpBBID2_EspaceApresNef.nef  
RepsSourceVariable :Racine § F2.CpBBID2_EspaceApresNef.nef  NbRepDbl : 1
la variable $1 est actuellement  : Racine/Rep2.2NomRep Racine/Rep2.2--- Nbre Chps :9---Racine/Rep2.2 Espace Doublons  § F2.2 CpBBID2_EspaceApresNef.nef  
find: ‘Racine/Rep2.2’: Aucun fichier ou dossier de ce type
RepsSourceVariable :Racine/Rep2.2 Espace Doublons  § F2.2 CpBBID2_EspaceApresNef.nef  NbRepDbl : 1
la variable $1 est actuellement  : Racine/Rep2.2NomRep Racine/Rep2.2--- Nbre Chps :11---Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § F2.2.2.1 CpBBID2_EspaceApresNef.nef  
RepsSourceVariable :Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § F2.2.2.1 CpBBID2_EspaceApresNef.nef  NbRepDbl : 2
la variable $1 est actuellement  : Racine/Rep2foisDblonsNomRep Racine/Rep2foisDblons--- Nbre Chps :6---Racine/Rep2foisDblons § F2.X2.2.1 CpBBID2_EspaceApresNef.nef  
RepsSourceVariable :Racine/Rep2foisDblons § F2.X2.2.1 CpBBID2_EspaceApresNef.nef  NbRepDbl : 1
la variable $1 est actuellement  : Racine/Rep2foisDblonsNomRep Racine/Rep2foisDblons--- Nbre Chps :6---Racine/Rep2foisDblons § FOrig2.1 CpBBID2_EspaceApresNef.nef  
RepsSourceVariable :Racine/Rep2foisDblons § FOrig2.1 CpBBID2_EspaceApresNef.nef  NbRepDbl : 2
la variable $1 est actuellement  : Racine/REPORIAvecFichierPbNomRep Racine/REPORIAvecFichierPb--- Nbre Chps :6---Racine/REPORIAvecFichierPb § FOrig2.1 CpBBID2_EspaceApresNef.nef  
RepsSourceVariable :Racine/REPORIAvecFichierPb § FOrig2.1 CpBBID2_EspaceApresNef.nef  NbRepDbl : 2
la variable $1 est actuellement  : RacineNomRep Racine--- Nbre Chps :6---Racine § F2BBID1_1 espaceApresJpg.jpg  
RepsSourceVariable :Racine § F2BBID1_1 espaceApresJpg.jpg  NbRepDbl : 2
la variable $1 est actuellement  : Racine/Rep2.2NomRep Racine/Rep2.2--- Nbre Chps :8---Racine/Rep2.2 Espace Doublons  § F2.2BID1_1espaceApresJpg.jpg  
RepsSourceVariable :Racine/Rep2.2 Espace Doublons  § F2.2BID1_1espaceApresJpg.jpg  NbRepDbl : 3
la variable $1 est actuellement  : Racine/Rep2.2NomRep Racine/Rep2.2--- Nbre Chps :11---Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § F2.2.2.1BBID1_1 espaceApresJpg.jpg  
RepsSourceVariable :Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § F2.2.2.1BBID1_1 espaceApresJpg.jpg  NbRepDbl : 4
la variable $1 est actuellement  : Racine/Rep2foisDblonsNomRep Racine/Rep2foisDblons--- Nbre Chps :6---Racine/Rep2foisDblons § F2.1X2_BBID1_1 espaceApresJpg.jpg  
RepsSourceVariable :Racine/Rep2foisDblons § F2.1X2_BBID1_1 espaceApresJpg.jpg  NbRepDbl : 3
la variable $1 est actuellement  : Racine/Rep2foisDblonsNomRep Racine/Rep2foisDblons--- Nbre Chps :6---Racine/Rep2foisDblons § FOri2.1BBID1_1 espaceApresJpg.jpg  
RepsSourceVariable :Racine/Rep2foisDblons § FOri2.1BBID1_1 espaceApresJpg.jpg  NbRepDbl : 4
la variable $1 est actuellement  : Racine/REPORIAvecFichierPbNomRep Racine/REPORIAvecFichierPb--- Nbre Chps :6---Racine/REPORIAvecFichierPb § FOri2.1BBID1_1 espaceApresJpg.jpg  
RepsSourceVariable :Racine/REPORIAvecFichierPb § FOri2.1BBID1_1 espaceApresJpg.jpg  NbRepDbl : 3
la variable $1 est actuellement  : RacineNomRep Racine--- Nbre Chps :7---Racine § F2_F07 Fichier avec espaces.mp3 
RepsSourceVariable :Racine § F2_F07 Fichier avec espaces.mp3 NbRepDbl : 3
la variable $1 est actuellement  : Racine/Rep2.2NomRep Racine/Rep2.2--- Nbre Chps :10---Racine/Rep2.2 Espace Doublons  § F2.2_F07 Fichier avec espaces.mp3 
RepsSourceVariable :Racine/Rep2.2 Espace Doublons  § F2.2_F07 Fichier avec espaces.mp3 NbRepDbl : 5
la variable $1 est actuellement  : Racine/Rep2.2NomRep Racine/Rep2.2--- Nbre Chps :12---Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § F2.2.2.1_F07 Fichier avec espaces.mp3 
RepsSourceVariable :Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § F2.2.2.1_F07 Fichier avec espaces.mp3 NbRepDbl : 6
la variable $1 est actuellement  : Racine/REPORIAvecFichierPbNomRep Racine/REPORIAvecFichierPb--- Nbre Chps :7---Racine/REPORIAvecFichierPb § FOri2.1_F07 Fichier avec espaces.mp3 
RepsSourceVariable :Racine/REPORIAvecFichierPb § FOri2.1_F07 Fichier avec espaces.mp3 NbRepDbl : 4
la variable $1 est actuellement  : Racine/Rep2.2NomRep Racine/Rep2.2--- Nbre Chps :7---Racine/Rep2.2 Espace Doublons  § FichierTxt3.txt 
RepsSourceVariable :Racine/Rep2.2 Espace Doublons  § FichierTxt3.txt NbRepDbl : 7
la variable $1 est actuellement  : Racine/Rep2.2NomRep Racine/Rep2.2--- Nbre Chps :9---Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § FichierTxt3.txt 
RepsSourceVariable :Racine/Rep2.2 Espace Doublons /Rep2.2.2.1 Doss Espace § FichierTxt3.txt NbRepDbl : 8
la variable $1 est actuellement  : Racine/Rep2.3DossierNormalNomRep Racine/Rep2.3DossierNormal--- Nbre Chps :4---Racine/Rep2.3DossierNormal § FichierTxt3.txt 
RepsSourceVariable :Racine/Rep2.3DossierNormal § FichierTxt3.txt NbRepDbl : 2
la variable $1 est actuellement  : Racine/REPORIAvecFichierPbNomRep Racine/REPORIAvecFichierPb--- Nbre Chps :4---Racine/REPORIAvecFichierPb § FOri2_FichierTxt3.txt 
RepsSourceVariable :Racine/REPORIAvecFichierPb § FOri2_FichierTxt3.txt NbRepDbl : 5
phil@phil-G750JH:~/Documents/JeCodeShell/TestAWK$ 

Merci bien

Dernière modification par philoeil (Le 30/04/2020, à 16:20)

Hors ligne

#6 Le 30/04/2020, à 20:49

kamaris

Re : [RESOLU] AWK usage separateur de champs mal maitrisé

Tu devrais prendre des exemples élémentaires pour tester ta compréhension des expressions régulières.
Par exemple, ici :

$ echo a b § c§d | awk -F' § ' '{for (i=1;i<=NF;i++) print "champ " i " : \"" $i "\""}'
champ 1 : "a b"
champ 2 : "c§d"
$ echo a b § c§d | awk -F'[ § ]' '{for (i=1;i<=NF;i++) print "champ " i " : \"" $i "\""}'
champ 1 : "a"
champ 2 : "b"
champ 3 : ""
champ 4 : ""
champ 5 : "c"
champ 6 : "d"
$

Tu peux aussi activer le traçage des commandes par set -x, afin de voir ce qui est effectivement exécuté, après interprétation par le shell :

$ set -x
$ echo a b § c§d | awk -F'[ § ]' '{for (i=1;i<=NF;i++) print "champ " i " : \"" $i "\""}' >/dev/null
+ echo a b § c§d
+ awk '-F[ § ]' '{for (i=1;i<=NF;i++) print "champ " i " : \"" $i "\""}'
$ echo a b § c§d | awk -F[' § '] '{for (i=1;i<=NF;i++) print "champ " i " : \"" $i "\""}' >/dev/null
+ echo a b § c§d
+ awk '-F[ § ]' '{for (i=1;i<=NF;i++) print "champ " i " : \"" $i "\""}'
$ 

On voit que -F'[ § ]' et -F[' § '] conduisent bien à la même commande.

--
PS : une prochaine fois, si l'édition de ton message contient une nouvelle question, postes-en un nouveau, car sinon il n'y a pas de notification (il se trouve que je repassais par là, mais sinon, je n'aurais pas vu ta nouvelle question).

Hors ligne

#7 Le 30/04/2020, à 21:57

philoeil

Re : [RESOLU] AWK usage separateur de champs mal maitrisé

Bonjour,
Demonstration parfaite, je pense avoir mieux compris cette fois.

Merci

Hors ligne