Une place pour une véritable innovation. Partagez vos propres utilitaires créés avec la communauté Manjaro.
Questions et discussions sur la programmation et le codage.
Répondre

awk avec une chaîne contenant des slashs

#1Messageil y a 5 mois

Bonjour,

Je suis en train d'essayer la fonction formulaire de zenity, je récupère les données contenues dans les champs du formulaire avec awk, il se trouve qu'une des données est une adresse web (variable url_affiche) , et awk réagit aux // alors que je voudrais qu'il les ignore, est il possible de le faire facilement ?
(oui, je sais, je suis nul en bash :oops: )

Extrait du script, les données sont séparées par ":" :

#!/bin/sh

formulaire=$(zenity --forms --title="Création de Fiche Film" --text="Remplir les champs de la liste" --separator=":" --add-entry="Titre" \
														--add-entry="Titre original" \
														--add-entry="URL de l'affiche" \
														--add-entry="Pays" \
														--add-entry="Réalisateur" \
														--add-entry="Distribution" \
														--add-entry="Genre" \
														--add-entry="Durée" \
														--add-entry="Année de sortie")
														
valider=$?
if ((valider != 0)); then
    echo "Pas Validé !"
    exit 1
fi

titre=$(awk -F : '{print $1}' <<<$formulaire)
titre_orig=$(awk -F : '{print $2}' <<<$formulaire)
url_affiche=$(awk -F : '{print $3}' <<<$formulaire)
pays=$(awk -F : '{print $4}' <<<$formulaire)
realisateur=$(awk -F : '{print $5}' <<<$formulaire)
distribution=$(awk -F : '{print $6}' <<<$formulaire)
genre=$(awk -F : '{print $7}' <<<$formulaire)
duree=$(awk -F : '{print $8}' <<<$formulaire)
annee=$(awk -F : '{print $9}' <<<$formulaire)

awk avec une chaîne contenant des slashs

#2Messageil y a 5 mois


awk avec une chaîne contenant des slashs

#3Messageil y a 5 mois

salut

en fait ton problème est tout autre :
- ton séparateur est :
- tu as un : dans l'url (et dans la durée ???)
bonjour:bonjour:http://manjaro.fr:france:smurf:
donc ton url est $3 et ":" et $4; pays: $5 ...

Le mieux est de changer de séparateur (pour | par exemple) :wink:

awk avec une chaîne contenant des slashs

#4Messageil y a 5 mois

Merci de vos réponses, je viens d'essayer avec | en séparateur, pas mieux, seuls les deux premiers champs sont bien extraits. Quant à l'astuce \/, je ne vois pas trop comment l'insérer dans la chaîne.

Je vais tester différents séparateurs afin de voir le comportement.

awk avec une chaîne contenant des slashs

#5Messageil y a 5 mois

sinon il est possible de se passer de awk :wink: plus rapide et moins de code

- separateur | dans zenity

on transforme la chaine en un tableau en une passe bash et non 36 appels à un programme externe

IFS="|" formulaire=($formulaire)
echo -e "${formulaire[@]}" # tout pour test visuel
et on peut récupérer maintenant la valeur du tableau (première valeur indice 0)

echo  "le titre: ${formulaire[0]}"
echo  "url: ${formulaire[2]}"
même pas d'obligation de créer 36 variables ;) (titre="${formulaire[0]}")

ps: avec bash et pas sh ! (ton shebang)

-------------------------

valider=$?
if ((valider != 0)); then
créer une variable qui sera la même chose qu'une variable ... aucun intérêt

if (($? != 0)); then
mais le top est de créer une fonction erreur avec juste un echo "$*" et exit 1

 (($? != 0)) && erreur "form non validé"
 ...
 [[ -z "${formulaire[0]}" ]] && erreur "Titre obligatoire"

awk avec une chaîne contenant des slashs

#6Messageil y a 5 mois

Bon, avec | ou ; j'ai eu des erreurs, ça se comporte normalement si le séparateur est %.
Je vais tester ta solution @papajoke, le shebang ne doit pas trop gêner /bin/sh est un lien symbolique de /bin/bash.

Répondre