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 23/09/2021, à 22:43

philoeil

[ RESOLU ] awk execution conditionnelle selon valeur champs $2

Bonjour,
Je recherche une solution pour conditionner une action selon la valeur du champs 2 d'un fichier texte avec comme séparateur de champs " § "
Je souhaite enlever les lignes du fichier Listeini.txt si le suffixe du nom du fichier est présent dans la liste .Aspi_FichierInterdits.ini

La condition dans awk écrite ne fonctionne pas, j'ai fait plusieurs essai sans succès
Merci pour votre aide

Le fichier texte exemple :

$ cat Listeini.txt 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05xmp § NimoFilm_331bb - Copie.jpg §xmp 0.760798 § Tue Aug 20 06:19:15.9980013000 2019 § xmp dernier accès le mardi 20 août 2019 à 18:01:55.2507420000xmp § 897811e1fc8ce2790f4876726202a2efxmp 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_331bb - Copie.jpg.xmp § 0.00164413 § Tue Aug 20 06:19:16.0000053000 2019 §  dernier accès le lundi 21 octobre 2019 à 21:22:34.9264154000 § e6bcef1a112f0d6c9359e84b5dc665ed 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_332bb.jpg § 0.913649 § Tue Aug 20 06:19:16.0340018000 2019 §  dernier accès le mardi 20 août 2019 à 18:01:55.2799677000 § 2cd7d3df9f4c599b616da6b0c50201ef 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_332bb.jpg.xmp § 0.00164413 § Tue Aug 20 06:19:16.0352687000 2019 §  dernier accès le lundi 21 octobre 2019 à 21:22:34.9948641000 § e6bcef1a112f0d6c9359e84b5dc665ed 

                 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_333bb.jpg § 1.01245 § Tue Aug 20 06:19:16.0826049000 2019 §  dernier accès le mardi 20 août 2019 à 18:01:55.3196730000 § 5a901aae688d1b310d80ff092633eea4 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_333bb.jpg.xmp § 0.00164413 § Tue Aug 20 06:19:16.0842467000 2019 §  dernier accès le lundi 21 octobre 2019 à 21:22:35.0609416000 § e6bcef1a112f0d6c9359e84b5dc665ed 

Le fichier des suffixes interdits :

$ cat .Aspi_FichiersInterdits.ini 
# fichier images metadonnées :
*.exif
*.iptc

*.rdf
     
*.xmp

Le code erroné :

#!/bin/bash
echo "ListeSupprimerAction :"
ListeSupprimerAction="TmpListeini.txt"
cp Listeini.txt TmpListeini.txt
echo "la liste de départ :"
cat "$ListeSupprimerAction"

# efface les lignes vide et lignes avec espaces seuls
egrep -v '^#' "./.Aspi_FichiersInterdits.ini" |  sed '/^$/d; /^\s*$/d' >SufInterdit.tmp

while read SufInterdit
do
awk -v Suf="$SufInterdit" 'BEGIN { print "impression $2"; FS=" § " }
{ print "ligne : "NR "nombre de champs"NF "Suf=" Suf }
{if ($2 ~ /Suf/)
    print NR "contient "Suf 
else
    print NR " ne contient pas "Suf }
' "$ListeSupprimerAction"
done <SufInterdit.tmp
 

Le résultat à l'execution

$ ./ExclureSuf1.sh 
ListeSupprimerAction :
la liste de départ :
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05xmp § NimoFilm_331bb - Copie.jpg §xmp 0.760798 § Tue Aug 20 06:19:15.9980013000 2019 § xmp dernier accès le mardi 20 août 2019 à 18:01:55.2507420000xmp § 897811e1fc8ce2790f4876726202a2efxmp 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_331bb - Copie.jpg.xmp § 0.00164413 § Tue Aug 20 06:19:16.0000053000 2019 §  dernier accès le lundi 21 octobre 2019 à 21:22:34.9264154000 § e6bcef1a112f0d6c9359e84b5dc665ed 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_332bb.jpg § 0.913649 § Tue Aug 20 06:19:16.0340018000 2019 §  dernier accès le mardi 20 août 2019 à 18:01:55.2799677000 § 2cd7d3df9f4c599b616da6b0c50201ef 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_332bb.jpg.xmp § 0.00164413 § Tue Aug 20 06:19:16.0352687000 2019 §  dernier accès le lundi 21 octobre 2019 à 21:22:34.9948641000 § e6bcef1a112f0d6c9359e84b5dc665ed 

                 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_333bb.jpg § 1.01245 § Tue Aug 20 06:19:16.0826049000 2019 §  dernier accès le mardi 20 août 2019 à 18:01:55.3196730000 § 5a901aae688d1b310d80ff092633eea4 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_333bb.jpg.xmp § 0.00164413 § Tue Aug 20 06:19:16.0842467000 2019 §  dernier accès le lundi 21 octobre 2019 à 21:22:35.0609416000 § e6bcef1a112f0d6c9359e84b5dc665ed 
impression $2
ligne : 1nombre de champs5Suf=*.exif
1 ne contient pas *.exif
ligne : 2nombre de champs6Suf=*.exif
2 ne contient pas *.exif
ligne : 3nombre de champs6Suf=*.exif
3 ne contient pas *.exif
ligne : 4nombre de champs6Suf=*.exif
4 ne contient pas *.exif
ligne : 5nombre de champs0Suf=*.exif
5 ne contient pas *.exif
ligne : 6nombre de champs1Suf=*.exif
6 ne contient pas *.exif
ligne : 7nombre de champs6Suf=*.exif
7 ne contient pas *.exif
ligne : 8nombre de champs6Suf=*.exif
8 ne contient pas *.exif
impression $2
ligne : 1nombre de champs5Suf=*.iptc
1 ne contient pas *.iptc
ligne : 2nombre de champs6Suf=*.iptc
2 ne contient pas *.iptc
ligne : 3nombre de champs6Suf=*.iptc
3 ne contient pas *.iptc
ligne : 4nombre de champs6Suf=*.iptc
4 ne contient pas *.iptc
ligne : 5nombre de champs0Suf=*.iptc
5 ne contient pas *.iptc
ligne : 6nombre de champs1Suf=*.iptc
6 ne contient pas *.iptc
ligne : 7nombre de champs6Suf=*.iptc
7 ne contient pas *.iptc
ligne : 8nombre de champs6Suf=*.iptc
8 ne contient pas *.iptc
impression $2
ligne : 1nombre de champs5Suf=*.rdf
1 ne contient pas *.rdf
ligne : 2nombre de champs6Suf=*.rdf
2 ne contient pas *.rdf
ligne : 3nombre de champs6Suf=*.rdf
3 ne contient pas *.rdf
ligne : 4nombre de champs6Suf=*.rdf
4 ne contient pas *.rdf
ligne : 5nombre de champs0Suf=*.rdf
5 ne contient pas *.rdf
ligne : 6nombre de champs1Suf=*.rdf
6 ne contient pas *.rdf
ligne : 7nombre de champs6Suf=*.rdf
7 ne contient pas *.rdf
ligne : 8nombre de champs6Suf=*.rdf
8 ne contient pas *.rdf
impression $2
ligne : 1nombre de champs5Suf=*.xmp
1 ne contient pas *.xmp
ligne : 2nombre de champs6Suf=*.xmp
2 ne contient pas *.xmp
ligne : 3nombre de champs6Suf=*.xmp
3 ne contient pas *.xmp
ligne : 4nombre de champs6Suf=*.xmp
4 ne contient pas *.xmp
ligne : 5nombre de champs0Suf=*.xmp
5 ne contient pas *.xmp
ligne : 6nombre de champs1Suf=*.xmp
6 ne contient pas *.xmp
ligne : 7nombre de champs6Suf=*.xmp
7 ne contient pas *.xmp
ligne : 8nombre de champs6Suf=*.xmp
8 ne contient pas *.xmp

Merci

Dernière modification par philoeil (Le 25/09/2021, à 22:20)

Hors ligne

#2 Le 23/09/2021, à 23:28

philoeil

Re : [ RESOLU ] awk execution conditionnelle selon valeur champs $2

Bonjour,
J'ai fait évolué le code mais j'ai toujours l'echec du traitement de la condition :
J'ai aussi corrigé le fichier .Aspi_FichiersInterdits.ini pensant que l'* était une source potntielle du problème

$ cat .Aspi_FichiersInterdits.ini 
# fichier images metadonnées :
.exif
.iptc

.rdf
     
.xmp
#!/bin/bash
echo "ListeSupprimerAction :"
ListeSupprimerAction="TmpListeini.txt"
cp Listeini.txt TmpListeini.txt
echo "la liste de départ :"
cat "$ListeSupprimerAction"

# efface les lignes vide et lignes avec espaces seuls
egrep -v '^#' "./.Aspi_FichiersInterdits.ini" |  sed '/^$/d; /^\s*$/d' >SufInterdit.tmp

while read SufInterdit
do
awk -v Suf="$SufInterdit" 'BEGIN { print "impression $2"; FS=" § " }
{ print "ligne : "NR "nombre de champs"NF "Suf=" Suf }
{
   if ( $2 ~ /Suf/ )
   {
   print NR "le champs" $2 "contient "Suf 
   }   
else
   {
   print NR  "le champs" $2 " ne contient pas "Suf
   }
}
' "$ListeSupprimerAction"
done <SufInterdit.tmp

L'echec ici :

impression $2
ligne : 1nombre de champs5Suf=.xmp
1le champsNimoFilm_331bb - Copie.jpg §xmp 0.760798 ne contient pas .xmp
ligne : 2nombre de champs6Suf=.xmp
2le champsNimoFilm_331bb - Copie.jpg.xmp ne contient pas .xmp
ligne : 3nombre de champs6Suf=.xmp
3le champsNimoFilm_332bb.jpg ne contient pas .xmp
ligne : 4nombre de champs6Suf=.xmp
4le champsNimoFilm_332bb.jpg.xmp ne contient pas .xmp
ligne : 5nombre de champs0Suf=.xmp
5le champs ne contient pas .xmp
ligne : 6nombre de champs1Suf=.xmp
6le champs ne contient pas .xmp
ligne : 7nombre de champs6Suf=.xmp
7le champsNimoFilm_333bb.jpg ne contient pas .xmp
ligne : 8nombre de champs6Suf=.xmp
8le champsNimoFilm_333bb.jpg.xmp ne contient pas .xmp

Hors ligne

#3 Le 23/09/2021, à 23:34

Watael

Re : [ RESOLU ] awk execution conditionnelle selon valeur champs $2

tu confonds regex et globbing
*.exif (par exemple) est un globbing shell
la regex correspondante serait .*\.exif


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

Hors ligne

#4 Le 24/09/2021, à 16:36

philoeil

Re : [ RESOLU ] awk execution conditionnelle selon valeur champs $2

Bonjour,

Merci Watael pour ta réponse.
Quelle correction vois-tu à apporter à

 if ( $2 ~ /Suf/ )

Est-ce que le traitement par awk n'est pas la bonne piste  ?
J'avais essayé avec egrep mais je ne voyez pas comment traiter que le contenu du champs 2.

Hors ligne

#5 Le 24/09/2021, à 17:57

philoeil

Re : [ RESOLU ] awk execution conditionnelle selon valeur champs $2

Bonjour,

Après de multiple essai, je crois que j'ai trouvé le problème mais je ne sais pas le résoudre :
tout tourne autour du fait que Suf est traité comme la suite de lettre Suf et non comme le contenu de la variable Suf

Je cherche encore mais si vous savez comment faire traiter la variable dans la séquence suivante je suis preneur

 if ($2 ~ /Suf/)

Hors ligne

#6 Le 24/09/2021, à 19:09

Watael

Re : [ RESOLU ] awk execution conditionnelle selon valeur champs $2

enlève les barres obliques.
mais ça ne changera pas qu'un globbing shell (ce que contient ton fichier .ini) n'est pas une regex.


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

Hors ligne

#7 Le 24/09/2021, à 19:31

philoeil

Re : [ RESOLU ] awk execution conditionnelle selon valeur champs $2

Bonjour,

Merci beaucoup Watael, (tu m'évite la camisole)
c'est dingue, tout ce que j'ai lu et essayé alors-qu'il ne fallait qu'enlever les barres //
Je change le contenu de la forme du fichier .ini

# fichier images metadonnées :
exif
iptc
rdf
xmp

Merci bien

Hors ligne

#8 Le 24/09/2021, à 20:52

Tawal

Re : [ RESOLU ] awk execution conditionnelle selon valeur champs $2

Hello,

Je pense que ton fichier .ini est un peu trop simple.
Car si un fichier se nomme fordfuel.txt, il va être traité comme contenant le suffixe rdf !


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#9 Le 24/09/2021, à 21:03

Watael

Re : [ RESOLU ] awk execution conditionnelle selon valeur champs $2

pas la peine de surcharger le fichier :

awk -v suffixe="$motif" '$2 ~ ".*\."suffixe"$"'

en gros.

ceci devrait être "plus simple"* :

 $ awk -F' § ' 'NR==FNR{motifs=motifs?motifs"|."$1:"."$1; next}$2 ~ motifs"$"' motifs donnees 

--
* ça va au moins simplifier le traitement. smile

Dernière modification par Watael (Le 24/09/2021, à 21:28)


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

Hors ligne

#10 Le 25/09/2021, à 07:50

philoeil

Re : [ RESOLU ] awk execution conditionnelle selon valeur champs $2

Bonjour,
Merci Watael et Tawal

Effectivement Tawal à raison ma "solution" n'est pas encore parfaite
Il me faut aussi traiter le cas motif du suffixe se trouvant dans la suite de caractère et non pas qu'à la fin.
J'en suis là :
Ma première approche partielle (insatisfaisante) qui marchait sur motif du suffixe à trouver à la fin du champs2 :
le code

#!/bin/bash
Resultat="./Resultat"
Resultat2="./Resultat2"
truncate -s 0 "$Resultat"
truncate -s 0 "$Resultat2"

echo "resultat (devrait etre vide) :"
cat $Resultat
echo "ListeSupprimerAction :"
ListeSupprimerAction="TmpListeini.txt"
cp Listeini.txt TmpListeini.txt
echo "
la liste de départ :"
cat "$ListeSupprimerAction"

# efface les lignes vide et lignes avec espaces seuls
egrep -v '^#' "./.Aspi_FichiersInterdits.ini" |  sed '/^$/d; /^\s*$/d' >SufInterdit.tmp

while read SufInterdit
do
awk -v Suf="$SufInterdit" 'BEGIN { FS=" § " }
 {
  if ($2 ~ Suf)
   {
   print NR  
   }
      
 } 
' "$ListeSupprimerAction" >> "$Resultat"
done <SufInterdit.tmp
sort -n -r $Resultat > "$Resultat2"
echo "
les lignes à supprimer :"
cat "$Resultat2"
while read LigneSupprime
do
   sed -i "$LigneSupprime"'d' "$ListeSupprimerAction"
done < "$Resultat2"
echo "
resultat final"
cat "$ListeSupprimerAction"

Le resultat :

$ ./ExclureSuf5.sh 
resultat (devrait etre vide) :
ListeSupprimerAction :

la liste de départ :
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05xmp § NimoFilm_331bb - Copie.jpg § xmp 0.760798 § Tue Aug 20 06:19:15.9980013000 2019 § xmp dernier accès le mardi 20 août 2019 à 18:01:55.2507420000xmp § 897811e1fc8ce2790f4876726202a2efxmp 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_331bb - Copie.jpg.xmp § 0.00164413 § Tue Aug 20 06:19:16.0000053000 2019 §  dernier accès le lundi 21 octobre 2019 à 21:22:34.9264154000 § e6bcef1a112f0d6c9359e84b5dc665ed 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_332bb.jpg § 0.913649 § Tue Aug 20 06:19:16.0340018000 2019 §  dernier accès le mardi 20 août 2019 à 18:01:55.2799677000 § 2cd7d3df9f4c599b616da6b0c50201ef 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_332bb.jpg.xmp § 0.00164413 § Tue Aug 20 06:19:16.0352687000 2019 §  dernier accès le lundi 21 octobre 2019 à 21:22:34.9948641000 § e6bcef1a112f0d6c9359e84b5dc665ed 

                 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_333bbSuf.jpg § 1.01245 § Tue Aug 20 06:19:16.0826049000 2019 §  dernier accès le mardi 20 août 2019 à 18:01:55.3196730000 § 5a901aae688d1b310d80ff092633eea4 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_333bb.jpg.xmp § 0.00164413 § Tue Aug 20 06:19:16.0842467000 2019 §  dernier accès le lundi 21 octobre 2019 à 21:22:35.0609416000 § e6bcef1a112f0d6c9359e84b5dc665ed 

les lignes à supprimer :
8
4
2

resultat final
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05xmp § NimoFilm_331bb - Copie.jpg § xmp 0.760798 § Tue Aug 20 06:19:15.9980013000 2019 § xmp dernier accès le mardi 20 août 2019 à 18:01:55.2507420000xmp § 897811e1fc8ce2790f4876726202a2efxmp 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_332bb.jpg § 0.913649 § Tue Aug 20 06:19:16.0340018000 2019 §  dernier accès le mardi 20 août 2019 à 18:01:55.2799677000 § 2cd7d3df9f4c599b616da6b0c50201ef 

                 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_333bbSuf.jpg § 1.01245 § Tue Aug 20 06:19:16.0826049000 2019 §  dernier accès le mardi 20 août 2019 à 18:01:55.3196730000 § 5a901aae688d1b310d80ff092633eea4 

J'essaie de comprendre et mettre en oeuvre le dernier conseil au combien précieux de Watael :
Le code a évolué comme cela :

#!/bin/bash
Resultat="./Resultat"
Resultat2="./Resultat2"
truncate -s 0 "$Resultat"
truncate -s 0 "$Resultat2"

echo "resultat (devrait etre vide) :"
cat $Resultat
echo "ListeSupprimerAction :"
ListeSupprimerAction="TmpListeini.txt"
cp Listeini.txt TmpListeini.txt
echo "
la liste de départ :"
cat "$ListeSupprimerAction"

# efface les lignes vide et lignes avec espaces seuls
egrep -v '^#' "./.Aspi_FichiersInterdits.ini" |  sed '/^$/d; /^\s*$/d' >SufInterdit.tmp



# Watael à dit :  awk -v suffixe="$motif" '$2 ~ ".*\."suffixe"$"'



while read SufInterdit
do
awk -v Suf="$motif" 'BEGIN { FS=" § " }
 {
  if ($2 ~ ".*\."Suf"$")
   {
   print NR  
   }
      
 } 
' "$ListeSupprimerAction" >> "$Resultat"
done <SufInterdit.tmp
sort -n -r $Resultat > "$Resultat2"
echo "
les lignes à supprimer :"
cat "$Resultat2"
while read LigneSupprime
do
   sed -i "$LigneSupprime"'d' "$ListeSupprimerAction"
done < "$Resultat2"
echo "
resultat final"
cat "$ListeSupprimerAction"

et le résultat (insatisfaisant) :

$ ./WExclureSuf6.sh 
resultat (devrait etre vide) :
ListeSupprimerAction :

la liste de départ :
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05xmp § NimoFilm_331bb - Copie.jpg § xmp 0.760798 § Tue Aug 20 06:19:15.9980013000 2019 § xmp dernier accès le mardi 20 août 2019 à 18:01:55.2507420000xmp § 897811e1fc8ce2790f4876726202a2efxmp 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_331bb - Copie.jpg.xmp § 0.00164413 § Tue Aug 20 06:19:16.0000053000 2019 §  dernier accès le lundi 21 octobre 2019 à 21:22:34.9264154000 § e6bcef1a112f0d6c9359e84b5dc665ed 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_332bb.jpg § 0.913649 § Tue Aug 20 06:19:16.0340018000 2019 §  dernier accès le mardi 20 août 2019 à 18:01:55.2799677000 § 2cd7d3df9f4c599b616da6b0c50201ef 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_332bb.jpg.xmp § 0.00164413 § Tue Aug 20 06:19:16.0352687000 2019 §  dernier accès le lundi 21 octobre 2019 à 21:22:34.9948641000 § e6bcef1a112f0d6c9359e84b5dc665ed 

                 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_333bbSuf.jpg § 1.01245 § Tue Aug 20 06:19:16.0826049000 2019 §  dernier accès le mardi 20 août 2019 à 18:01:55.3196730000 § 5a901aae688d1b310d80ff092633eea4 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_333bb.jpg.xmp § 0.00164413 § Tue Aug 20 06:19:16.0842467000 2019 §  dernier accès le lundi 21 octobre 2019 à 21:22:35.0609416000 § e6bcef1a112f0d6c9359e84b5dc665ed 
awk: ligne de commande:3: avertissement : séquence d'échappement « \. » traitée comme un simple « . »
awk: ligne de commande:3: avertissement : séquence d'échappement « \. » traitée comme un simple « . »
awk: ligne de commande:3: avertissement : séquence d'échappement « \. » traitée comme un simple « . »
awk: ligne de commande:3: avertissement : séquence d'échappement « \. » traitée comme un simple « . »

les lignes à supprimer :
8
8
8
8
7
7
7
7
4
4
4
4
3
3
3
3
2
2
2
2
1
1
1
1

resultat final

Je n'ai pas encore réussi à comprendre

watael  a écrit :

$ awk -F' § ' 'NR==FNR{motifs=motifs?motifs"|."$1:"."$1; next}$2 ~ motifs"$"' motifs donnees

Je cherche et reviendrai (si vous en doutiez)

Hors ligne

#11 Le 25/09/2021, à 11:16

Watael

Re : [ RESOLU ] awk execution conditionnelle selon valeur champs $2

awk -F' § ' 'NR==FNR{motifs=motifs?motifs"|."$1:"."$1; next}$2 ~ motifs"$"' fichierMotifs fichierDonnees

ça permet de se passer de la boucle while.

on construit une regex dans la variable motifs à partir du fichier fichierMotifs;
quand il a fini d'être lu, on affiche les lignes qui correspondent à la regex dans le fichier fichierDonnees.


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

Hors ligne

#12 Le 25/09/2021, à 21:38

philoeil

Re : [ RESOLU ] awk execution conditionnelle selon valeur champs $2

Bonjour,
Et Wahou! Watael
C'est puissant!
ce que j'obtiens avec l'adaptation à mes noms de variables
Le script modifié :

#!/bin/bash
echo "ListeSupprimerAction :"
ListeSupprimerAction="TmpListeini.txt"
cp Listeini.txt TmpListeini.txt
echo "
la liste de départ :"
cat "$ListeSupprimerAction"

# efface les lignes vide et lignes avec espaces seuls
egrep -v '^#' "./.Aspi_FichiersInterdits.ini" |  sed '/^$/d; /^\s*$/d' >SufInterdit.tmp
echo -e "\nContenu de la liste des motifs suffixes interdits :"
cat SufInterdit.tmp
echo -e "\nle resultat de la ligne awk :"
awk -F' § ' 'NR==FNR{motifs=motifs?motifs"|."$1:"."$1; next}$2 ~ motifs"$"' SufInterdit.tmp "$ListeSupprimerAction"

Le resultat :

$ ./WExclureSuf7.sh 
ListeSupprimerAction :

la liste de départ :
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05xmp § NimoFilm_331bb - Copie.jpg § xmp 0.760798 § Tue Aug 20 06:19:15.9980013000 2019 § xmp dernier accès le mardi 20 août 2019 à 18:01:55.2507420000xmp § 897811e1fc8ce2790f4876726202a2efxmp 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_331bb - Copie.jpg.xmp § 0.00164413 § Tue Aug 20 06:19:16.0000053000 2019 §  dernier accès le lundi 21 octobre 2019 à 21:22:34.9264154000 § e6bcef1a112f0d6c9359e84b5dc665ed 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_332bb.jpg § 0.913649 § Tue Aug 20 06:19:16.0340018000 2019 §  dernier accès le mardi 20 août 2019 à 18:01:55.2799677000 § 2cd7d3df9f4c599b616da6b0c50201ef 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_332bb.jpg.xmp § 0.00164413 § Tue Aug 20 06:19:16.0352687000 2019 §  dernier accès le lundi 21 octobre 2019 à 21:22:34.9948641000 § e6bcef1a112f0d6c9359e84b5dc665ed 

                 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_333bbSuf.jpg § 1.01245 § Tue Aug 20 06:19:16.0826049000 2019 §  dernier accès le mardi 20 août 2019 à 18:01:55.3196730000 § 5a901aae688d1b310d80ff092633eea4 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_333bb.jpg.xmp § 0.00164413 § Tue Aug 20 06:19:16.0842467000 2019 §  dernier accès le lundi 21 octobre 2019 à 21:22:35.0609416000 § e6bcef1a112f0d6c9359e84b5dc665ed 

Contenu de la liste des motifs suffixes interdits :
exif
iptc
rdf
xmp

le resultat de la ligne awk :
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_331bb - Copie.jpg.xmp § 0.00164413 § Tue Aug 20 06:19:16.0000053000 2019 §  dernier accès le lundi 21 octobre 2019 à 21:22:34.9264154000 § e6bcef1a112f0d6c9359e84b5dc665ed 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_332bb.jpg.xmp § 0.00164413 § Tue Aug 20 06:19:16.0352687000 2019 §  dernier accès le lundi 21 octobre 2019 à 21:22:34.9948641000 § e6bcef1a112f0d6c9359e84b5dc665ed 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_333bb.jpg.xmp § 0.00164413 § Tue Aug 20 06:19:16.0842467000 2019 §  dernier accès le lundi 21 octobre 2019 à 21:22:35.0609416000 § e6bcef1a112f0d6c9359e84b5dc665ed 

finalement je reviens sur ce que j'ai dit

Effectivement Tawal à raison ma "solution" n'est pas encore parfaite
Il me faut aussi traiter le cas motif du suffixe se trouvant dans la suite de caractère et non pas qu'à la fin.

Il ne me faut pas traiter les suffixes dans la chaine de caractère mais seulemnt en fin de champs 2

Watael : Si tu le permets je n'arrive pas à bien comprendre. J'ai essayé de décortiquer la commande et reste perplexe sur quelques points :

FNR numéro d'enregistrement dans le fichier courant
NR nombre d'enregistrements lus
-F' § '
    Identifie le séparateur de champs ' § '
NR==FNR
    "next" pour sauter la première correspondance avec NR= = FNR
action :
    motifs=motifs?motifs
        Le point d'interrogation ( ? ) correspond à zéro ou une occurrence de motifs
        Je ne comprends pas l'objet de cette égalité
    |
         opérateur logique non
        Je suppose pour supprimer le point de motif
            Mais je ne comprends peut-être pas
    ."$1:"."$1
        Cette expression me semble correspondre à "tout caractère suivi de champs 1 "$1:" et un point "." et champs1
            je ne comprends peut-être  pas ce que représente $1
            Pourquoi ce point .
            pourquoi "$1:"
    next
        Le next à l'intérieur du bloc Action signifie que toutes les commandes supplémentaires sont ignorées et qu'elles ne sont exécutées que sur des fichiers autres que le premier.
$2 ~ motifs"$"
    compare le champs 2 et motifs ($) en fin du champs 2

Il me reste à adapter cette commande  pour qu'elle me renvoie l'inverse puisque ce que je cherche à faire c'est exclure de ma liste les fichiers avec le suffixe "interdit" à protéger du traitement du script

Merci encore

Hors ligne

#13 Le 25/09/2021, à 21:58

philoeil

Re : [ RESOLU ] awk execution conditionnelle selon valeur champs $2

Bonjour,

C'est RESOLU : (:lol:OK je ne sais pas faire aussi court que Watael, mais le résultat me semble conforme)

#!/bin/bash
Resultat="./Resultat"
Resultat2="./Resultat2"
truncate -s 0 "$Resultat"
truncate -s 0 "$Resultat2"

echo "ListeSupprimerAction :"
ListeSupprimerAction="TmpListeini.txt"
cp Listeini.txt TmpListeini.txt
echo "
la liste de départ :"
cat "$ListeSupprimerAction"

# efface les lignes vide et lignes avec espaces seuls
egrep -v '^#' "./.Aspi_FichiersInterdits.ini" |  sed '/^$/d; /^\s*$/d' >SufInterdit.tmp
echo -e "\nContenu de la liste des motifs suffixes interdits :"
cat SufInterdit.tmp
echo -e "\nle resultat de la ligne awk : les lignes à supprimer :"
awk -F' § ' 'NR==FNR{motifs=motifs?motifs"|."$1:"."$1; next} {if ($2 ~ motifs"$") { print FNR }}' SufInterdit.tmp "$ListeSupprimerAction" >> "$Resultat"


 sort -n -r $Resultat > "$Resultat2"
 cat "$Resultat2"
 while read LigneSupprime
 do
   sed -i "$LigneSupprime"'d' "$ListeSupprimerAction"
 done < "$Resultat2"
 echo "
 resultat final"
 cat "$ListeSupprimerAction"

Le resultat :

$ ./WExclureSuf9.sh 
ListeSupprimerAction :

la liste de départ :
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05xmp § NimoFilm_331bb - Copie.jpg § xmp 0.760798 § Tue Aug 20 06:19:15.9980013000 2019 § xmp dernier accès le mardi 20 août 2019 à 18:01:55.2507420000xmp § 897811e1fc8ce2790f4876726202a2efxmp 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_331bb - Copie.xmpblabla § 0.00164413 § Tue Aug 20 06:19:16.0000053000 2019 §  dernier accès le lundi 21 octobre 2019 à 21:22:34.9264154000 § e6bcef1a112f0d6c9359e84b5dc665ed 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_332bb.jpg § 0.913649 § Tue Aug 20 06:19:16.0340018000 2019 §  dernier accès le mardi 20 août 2019 à 18:01:55.2799677000 § 2cd7d3df9f4c599b616da6b0c50201ef 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_332bb.jpg.xmp § 0.00164413 § Tue Aug 20 06:19:16.0352687000 2019 §  dernier accès le lundi 21 octobre 2019 à 21:22:34.9948641000 § e6bcef1a112f0d6c9359e84b5dc665ed 

                 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_333bbSuf.jpg § 1.01245 § Tue Aug 20 06:19:16.0826049000 2019 §  dernier accès le mardi 20 août 2019 à 18:01:55.3196730000 § 5a901aae688d1b310d80ff092633eea4 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_333bb.jpg.xmp § 0.00164413 § Tue Aug 20 06:19:16.0842467000 2019 §  dernier accès le lundi 21 octobre 2019 à 21:22:35.0609416000 § e6bcef1a112f0d6c9359e84b5dc665ed 

Contenu de la liste des motifs suffixes interdits :
exif
iptc
rdf
xmp

le resultat de la ligne awk : les lignes à supprimer :
8
4

 resultat final
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05xmp § NimoFilm_331bb - Copie.jpg § xmp 0.760798 § Tue Aug 20 06:19:15.9980013000 2019 § xmp dernier accès le mardi 20 août 2019 à 18:01:55.2507420000xmp § 897811e1fc8ce2790f4876726202a2efxmp 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_331bb - Copie.xmpblabla § 0.00164413 § Tue Aug 20 06:19:16.0000053000 2019 §  dernier accès le lundi 21 octobre 2019 à 21:22:34.9264154000 § e6bcef1a112f0d6c9359e84b5dc665ed 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_332bb.jpg § 0.913649 § Tue Aug 20 06:19:16.0340018000 2019 §  dernier accès le mardi 20 août 2019 à 18:01:55.2799677000 § 2cd7d3df9f4c599b616da6b0c50201ef 

                 
/media/phil/SD5_VID_1T_N/Images/Images_2019/Diapos/diapoJO/JO 05 § NimoFilm_333bbSuf.jpg § 1.01245 § Tue Aug 20 06:19:16.0826049000 2019 §  dernier accès le mardi 20 août 2019 à 18:01:55.3196730000 § 5a901aae688d1b310d80ff092633eea4 

Merci
P.S : Je garde un oeil aux réponses qui voudraient bien expliquer ou apporter des compléments d'infos à la ligne de Watael du post précédent

Hors ligne

#14 Le 25/09/2021, à 22:18

philoeil

Re : [ RESOLU ] awk execution conditionnelle selon valeur champs $2

Bonjour,
J'ai (peut-être) presque tout compris
| n'est pas l'opérateur booleen NOT mais l'opérateur de regroupement dans l'expression régulière

{motifs=motifs?motifs"|."$1:"."$1; next}

Signifie traiter les 2 cas avec et sans point devant le "MotifSuffixe"

mais pourquoi le "$1:"

Hors ligne

#15 Le 25/09/2021, à 23:33

Watael

Re : [ RESOLU ] awk execution conditionnelle selon valeur champs $2

cale signifie :
motifs vaut, si motifs existe, motifs et le premier champ du fichier motifs, sinon seulement le premier champ de ce fichier.
à la première ligne, motifs vaut .exif,
à la deuxième ligne, motifs vaut .exif|.iptc, etc.


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

Hors ligne

#16 Le 26/09/2021, à 10:03

philoeil

Re : [ RESOLU ] awk execution conditionnelle selon valeur champs $2

Merci Watael pour l'explication
(C'est plus clair pour moi maintenant)

Bonne journée

Hors ligne

#17 Le 26/09/2021, à 12:18

Watael

Re : [ RESOLU ] awk execution conditionnelle selon valeur champs $2

d'ailleurs, en me relisant, je vois qu'on peut encore simplifier, et ne pas ajouter le point devant chaque suffixe :

awk -F' § ' 'NR==FNR{motifs=motifs?motifs"|"$1:$1; next}$2 ~ ".("motifs")$"' fichierMotifs fichierDonnees

le motifs final utilisé sera alors .(exif|iptc|rdf|xmp)$


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

Hors ligne