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 07/05/2009, à 17:21

Lord Northam

AWK utilisé dans une Boucle Bash (Résolu)

Bonjour à tous,

Voilà à la sortie de Zenity --checklist, j'ai une suite d'identifiants se trouvant dans une variable. Le contenu donne :

2340|1230|5430|

Avec un awk -F'|' '{print $1}' je peux récupérer facilement le premier, en changeant par $2, le second...

Mais je voudrais faire cela dans une boucle, sachant que le nombre de codes retournés n'est pas fixe.

Si vous avez une idée, merci d'avance. wink

Dernière modification par Lord Northam (Le 08/05/2009, à 10:13)

Hors ligne

#2 Le 07/05/2009, à 20:22

Totor

Re : AWK utilisé dans une Boucle Bash (Résolu)

Bonsoir,
Comme ceci, cela t'évitera d'effectuer une 'boucle Bash'

echo "blabla..."|zenity --checklist | awk -F\| '{ for(i=1;i<=NF;i++) { print "$"i"="$i}}'

Si tu veux vraiment réaliser ton traitement en bash :

#!/bin/bash
while read valeur
do
 [..traitement..]
done < <(echo "blabla..."|zenity --checklist | tr '|' '\n')

Dernière modification par Totor (Le 07/05/2009, à 20:25)


-- Lucid Lynx --

Hors ligne

#3 Le 08/05/2009, à 02:47

Lord Northam

Re : AWK utilisé dans une Boucle Bash (Résolu)

Bonsoir,

Merci de ta réponse, mais je suis dans une fonction qui n'a aucune liaison avec la sortie de Zenity, donc je dois traiter les données d'une autre façon, depuis la chaîne indépendante.

Je démarre en Bash alors je ne doute pas que ta proposition soit optimisée, mais elle va au delà de ma compréhension. J'aimerais déjà savoir marcher avant de courir. big_smile

Hors ligne

#4 Le 08/05/2009, à 09:33

Totor

Re : AWK utilisé dans une Boucle Bash (Résolu)

Cela ne change pas grand chose à ce que je t'ai donné :

#!/bin/bash

taTonction()
{
VARIABLE="2340|1230|5430|" # valeur de zenity (probablement $1, ou $2, ou $3 ...)
VARIABLE="${VARIABLE%|}"
while read valeur
do
 echo "${valeur}" #  à remplacer par tout ton traitement (valeur correspond à chaque choix de la checklist)
done < <(echo "${VARIABLE}"|tr '|' '\n')
}

une autre proposition, "full bash" :

#!/bin/bash

taTonction()
{
VARIABLE="2340|1230|5430|" # valeur de zenity (probablement $1, ou $2, ou $3 ...)
VARIABLE="${VARIABLE%|}|"
while read -d '|' valeur
do
 echo "${valeur}" #  à remplacer par tout ton traitement (valeur correspond à chaque choix de la checklist)
done <<< "${VARIABLE}"
}

-- Lucid Lynx --

Hors ligne

#5 Le 08/05/2009, à 10:13

Lord Northam

Re : AWK utilisé dans une Boucle Bash (Résolu)

Bah ça c'est parfait et ça fonctionne à merveille, c'était le VARIABLE="${VARIABLE%|}" que je ne connaissais pas. Je cherchais sur la piste awk

Un grand merci pour ta précieuse aide, je trouve souvent des solutions via Google mais là j'étais bloqué ^^

Hors ligne

#6 Le 08/05/2009, à 10:37

Totor

Re : AWK utilisé dans une Boucle Bash (Résolu)

${VARIABLE%|} ne permet que de retourner la valeur de VARIABLE sans le dernier caractère si ce dernier est un pipe (donc |).

EDIT :
D'ailleurs, cela me fait penser à une autre solution :

#!/bin/bash

taTonction()
{
VARIABLE="2340|1230|5430|" # valeur de zenity (probablement $1, ou $2, ou $3 ...)
VARIABLE="${VARIABLE%|}" # suppression d'un éventuel dernier caractère (|)
VARIABLE=( ${VARIABLE//|/ } ) # transformation en tableau
for valeur in "${VARIABLE[@]}" # boucle sur chacun des éléments du tableau
do
 echo "${valeur}" #  à remplacer par tout ton traitement (valeur correspond à chaque choix de la checklist)
done
}

Dernière modification par Totor (Le 08/05/2009, à 10:42)


-- Lucid Lynx --

Hors ligne

#7 Le 08/05/2009, à 11:11

Lord Northam

Re : AWK utilisé dans une Boucle Bash (Résolu)

Lol big_smile

Le dernier caractère | c'est moi qui l'ajoute (var=$var"|"), c'était pour awk forcément ! Car à la sortie de Zenity, il n'y est pas xD

J'ai deux lignes en trop donc. lol:lol:

Hors ligne

#8 Le 11/05/2009, à 22:51

Lord Northam

Re : AWK utilisé dans une Boucle Bash (Résolu)

Je vais essayer ta dernière proposition, car je remarque qu'à la précédente il ne traite jamais la dernière valeur.

Hors ligne

#9 Le 12/05/2009, à 09:51

Totor

Re : AWK utilisé dans une Boucle Bash (Résolu)

Lord Northam a écrit :

Je vais essayer ta dernière proposition, car je remarque qu'à la précédente il ne traite jamais la dernière valeur.

si tu as enlevé le pipe, l'avant dernière proposition (celle avec le read) ne fonctionnera effectivement pas pour le dernier élément de ta liste.


-- Lucid Lynx --

Hors ligne

#10 Le 12/05/2009, à 11:13

Lord Northam

Re : AWK utilisé dans une Boucle Bash (Résolu)

Totor a écrit :
Lord Northam a écrit :

Je vais essayer ta dernière proposition, car je remarque qu'à la précédente il ne traite jamais la dernière valeur.

si tu as enlevé le pipe, l'avant dernière proposition (celle avec le read) ne fonctionnera effectivement pas pour le dernier élément de ta liste.

Donc il faut vraiment en ajouter un soit même.

Avec la transformation en tableau et le for ça fonctionne très bien. wink

Hors ligne