Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1010 connectés 

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Awk ou Sed

n°120390
totodu92
Posté le 18-04-2014 à 17:14:38  profilanswer
 

Bonjour tout le monde. J'aurais besoin de quelques conseils.
Donc voila. Je veux réaliser un script qui me permettre de contrôler l’existence de plusieurs fichiers. Les chemins de ses fichiers sont inscrits dans le fichier "toto.sh". Ainsi vous l'avez compris, ma question est comment faire pour sélectionner seulement les chemins de #Diner avec le awk ou le sed et les inscrire dans une variable afin de faire une recherche sur celle-ci par la suite ?
 
Voici le contenu du fichier toto.sh:
 
#Diner(`_salut_',`/etc/home/log/resolv.conf')
#Diner(`_coucou_',`/etc/home/log/host.conf')
#Diner(`_bisous_',`/etc/home/log/vim.conf')
#Aurevoir(`_bye_',`/etc/home/log/view.conf')
 
Donc voici le début de la ligne du mon script qui va sélectionner seulement les #Diner
 
ctrlToto=`grep "#Diner" toto.sh | awk '{print $1}' | awk -F','  '{print $2}'`
 
Cette commande me ressort :  
/etc/home/log/resolv.conf') /etc/home/log/host.conf') /etc/home/log/vim.conf')
 
Il m'est donc impossible de faire une recherche par la suite sur la variable ctrlDepot
Pouvez vous m'aider s'il vous plait ? :??:  
Je vous remercie d'avance...


Message édité par totodu92 le 18-04-2014 à 17:25:38
mood
Publicité
Posté le 18-04-2014 à 17:14:38  profilanswer
 

n°120411
totodu92
Posté le 20-04-2014 à 21:31:05  profilanswer
 

Aidez moi s''il vous plait

n°120413
Adrix12
Adrix pour Adrien et 12 euhh..
Posté le 21-04-2014 à 18:11:57  profilanswer
 

Bon je suis mauvais en regex donc j'ai pas essayé de comprendre comment t'arrives au résultat mais j'ai ajouté un truc pour nettoyer le résultat :
 

Code :
  1. ctrlToto=$(grep "#Diner" toto.sh | awk '{print $1}' | awk -F','  '{print $2}' | tr -d "`" | tr -d "')" )


Ca donne ça comme output :
 

Code :
  1. /etc/home/log/resolv.conf
  2. /etc/home/log/host.conf
  3. /etc/home/log/vim.conf


Mais si tu as les caractères "`" ou "')" dans le nom de ton fichier ça marche plus
 
Un truc plus complet :
 

Code :
  1. #! /bin/env bash
  2. array=( $(grep "#Diner" toto.sh | awk '{print $1}' | awk -F','  '{print $2}' | tr -d "\`" | tr -d "')" | tr "\n" " " ))
  3. for test1 in "${array[@]}"
  4. do
  5.     touch "$test1" > /dev/null 2>&1
  6.     if [ "$?" != "0" ]
  7.         then
  8.             echo "Y'a un souci pour le fichier \""$test1"\""
  9.         else
  10.             echo "Le fichier \""$test1"\" est la"
  11.     fi
  12. done


Avec ça faut rajouter pas d'espace comme contrainte.

Message cité 1 fois
Message édité par Adrix12 le 21-04-2014 à 18:44:13

---------------
Si vous avez de bonnes connaissances en gstreamer SVP cliquez :-)
n°120415
skoizer
tripoux et tête de veau
Posté le 22-04-2014 à 11:49:28  profilanswer
 

pourquoi ne poste tu pas ta qestion sur la bonne partie du forum ?


---------------
je veux tout, tout de suite, et gratuitement ! miladiou !
n°120423
totodu92
Posté le 22-04-2014 à 17:46:19  profilanswer
 

Adrix12 a écrit :

Bon je suis mauvais en regex donc j'ai pas essayé de comprendre comment t'arrives au résultat mais j'ai ajouté un truc pour nettoyer le résultat :
 

Code :
  1. ctrlToto=$(grep "#Diner" toto.sh | awk '{print $1}' | awk -F','  '{print $2}' | tr -d "`" | tr -d "')" )


Ca donne ça comme output :
 

Code :
  1. /etc/home/log/resolv.conf
  2. /etc/home/log/host.conf
  3. /etc/home/log/vim.conf


Mais si tu as les caractères "`" ou "')" dans le nom de ton fichier ça marche plus
 
Un truc plus complet :
 

Code :
  1. #! /bin/env bash
  2. array=( $(grep "#Diner" toto.sh | awk '{print $1}' | awk -F','  '{print $2}' | tr -d "\`" | tr -d "')" | tr "\n" " " ))
  3. for test1 in "${array[@]}"
  4. do
  5.     touch "$test1" > /dev/null 2>&1
  6.     if [ "$?" != "0" ]
  7.         then
  8.             echo "Y'a un souci pour le fichier \""$test1"\""
  9.         else
  10.             echo "Le fichier \""$test1"\" est la"
  11.     fi
  12. done


Avec ça faut rajouter pas d'espace comme contrainte.


 
Merci de ta réponse et de ton aide. Alors j'ai essayé avec quelque modification aussi mais ça ne marche pas.
 
Donc j'ai trouvé un autre moyen :
ctrlToto=`grep "salut" toto.sh | awk '{print $1}' | awk -F',\`' '{print $2}' | tr -d "')"  
 
De cette manière la commande me ressort juste /etc/home/log/resolv.conf
Cependant je voudrais faire une boucle pour avoir le chemin de coucou et bisous.
 
C'est la que je bloque... :??:

n°120443
totodu92
Posté le 23-04-2014 à 17:02:31  profilanswer
 

Pas de réponses ?

n°120445
Adrix12
Adrix pour Adrien et 12 euhh..
Posté le 23-04-2014 à 17:17:13  profilanswer
 

Ben tu poste dans la catégorie réseau dans systèmes et réseaux pro donc forcément t'aura pas beaucoup de réponses a ton PB de script... Y'a des catégories plus adaptées.
 
Si j'y pense je te met mon script sur pastebin ce soir,j'avais testé et il marche.


---------------
Si vous avez de bonnes connaissances en gstreamer SVP cliquez :-)
n°120457
roondar
Posté le 23-04-2014 à 23:23:40  profilanswer
 

Code :
  1. #!/bin/bash
  2. awk -F ',`' '/#Diner/{gsub("\047)","",$2); print $2}' toto.sh| while read chemin
  3. do
  4. test -e  "$chemin" && echo "$chemin exist"|| echo "$chemin not exist"
  5. done

Message cité 1 fois
Message édité par roondar le 23-04-2014 à 23:24:04
n°120478
totodu92
Posté le 25-04-2014 à 10:17:12  profilanswer
 

roondar a écrit :

Code :
  1. #!/bin/bash
  2. awk -F ',`' '/#Diner/{gsub("\047)","",$2); print $2}' toto.sh| while read chemin
  3. do
  4. test -e  "$chemin" && echo "$chemin exist"|| echo "$chemin not exist"
  5. done



 
Merci. Le script que j'ai fais ressemble un peu au tien :)


Aller à :
Ajouter une réponse
 

Sujets relatifs
Plus de sujets relatifs à : Awk ou Sed


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR