Problème d'alias

Fermé
dna.factory Messages postés 24942 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 22 avril 2024 - 24 déc. 2014 à 15:44
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 - 30 avril 2015 à 17:06
Bonjour,

Je travaille sur un script sh, et fatalement, je me retrouve régulièrement avec les même séries de commandes.
J'ai donc décidé d'utiliser les alias.

En particulier j'en utilise 2
un Query = "psql -U compte|head -n-2|tail -n+3"
qui fonctionne très bien (j'ai fait le shopt expand)

Par contre, je voudrais utiliser un Unxml, et là je bloque.
La commande que je veux aliaser est la suivante :
awk -F">" '{print $2}'|awk -F"<" 'print $1'
Quand j'utilise cette commande dans le corps du script, elle fonctionne bien.

Problème, à cause des apostrophes, je peux pas faire de
alias Unxml="awk -F">" '{print $2}'|awk -F"<" 'print $1'"
'{print }': No such file or directory

j'ai essaye d'utiliser des apostrophes simples pour le -F
pas d'erreur, mais pas d'execution non plus

J'ai essayé de virer complètement les apostrophes :
awk: option -F lacks argument

J'ai essayé d'échapper les apostrophes avec des \
Pas d'erreur, mais pas d'execution non plus.

Je connais pas les codes à mettre à la places des apostrophes ou des ><, maintenant, je sais pas si ça marcherait vraiment...

en soit, grâce au copier coller, c'est pas la mort (ça fait un an que j'ai le problème), mais cette commande est utilisées une 20aines de fois, donc pour la lisibilité et la légèreté, c'est toujours bon à prendre



A voir également:

2 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
24 déc. 2014 à 15:52
Salut,

awk -F">" '{print $2}'|awk -F"<" 'print $1'
Et d'un apparemment il n'y a pas de source d'entrée (fichier) pour le 1er awk et dans le 2ème il manquerait les accolades, non ? ;-\
0
dna.factory Messages postés 24942 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 22 avril 2024 1 609
24 déc. 2014 à 16:10
pour le deuxième awk c'est une erreur de recopie, y'a bien les accolades normalement
pour le manque de fichier source, c'est fait exprès, c'est le principe de l'alias.
une fois défini mon alias de la façon suivante
alias Unxml="awk -F">" '{print $2}'|awk -F"<" '{print $1}'"


en résumé :
grep Number fichier.xml (ou cat fichier.xml |grep Number)
<exportNumber>90</exportNumber>
grep Number fichier.xml|awk -F ">" '{print $2}'|awk -F "<" '{print $1}'
90
(y'a peut-être plus intelligent pour déparser, voir même avec des outils tout prêt, mais bon, ça marche et c'est moi qui l'ai fait :)).

J'aurais donc voulu pouvoir faire
grep Number fichier.xml|Unxml


Je l'ai fait avec le Query comme indique plus haut, et ça fonctionne, donc le principe est valable
alias Query = "psql -U compte|head -n-2|tail -n+3"
echo "requete"|Query
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407 > dna.factory Messages postés 24942 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 22 avril 2024
24 déc. 2014 à 16:26
Ok, alors c'est peut être un problème de quote ;-\

Essaie comme ça :
alias Unxml="awk -F\">\" '{print $2}'|awk -F\"<\" '{print $1}'" 
0
dna.factory Messages postés 24942 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 22 avril 2024 1 609
24 déc. 2014 à 16:34
J'ai essayé... ça marche pas...
juste pour être sur que c'est pas une histoire d'espace, voila ce que j'avais tappé :
alias Unxml="awk -F\">\" '{print $2}'|awk -F\"<\" '{print $1}'"

pas d'erreur, mais ça ne marche pas.
j'ai terminé ma journée, c'est noyel...
je reprendrais le dossier vendredi.
Après, comme je dit, c'est pas bloquant
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407 > dna.factory Messages postés 24942 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 22 avril 2024
24 déc. 2014 à 16:45
;-\

Alors essaie de créer une fonction plutôt qu'un alias...
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407 > dna.factory Messages postés 24942 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 22 avril 2024
24 déc. 2014 à 16:59
Une autre piste, échapper aussi les "$" :

alias Unxml="awk -F\">\" '{print \$2}'|awk -F\"<\" '{print \$1}'"
0
dna.factory Messages postés 24942 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 22 avril 2024 1 609
29 avril 2015 à 10:30
Avec les fonctions

UnXml()
{
echo $1 |awk -F ">" '{print $2}'|awk -F "<" '{print $1}'
}

UnXml `cat chemin/fichier.xml|grep Field` > /tmp/test.dna
cat /tmp/test.dna


le résultat est celui souhaité.
Je suis pas sur que ça sera aussi simple à utiliser qu'un alias, mais c'est déjà ça de pris.
0
dna.factory Messages postés 24942 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 22 avril 2024 1 609
Modifié par dna.factory le 29/04/2015 à 10:57
Il me reste un petit soucis (rien d'insurmontable, on est dans l'ordre du cosmétique/réduction de code).
si je retourne directement mon résultat, pas de soucis pour utiliser la fonction,
par contre, si je veux le stocker dans une mémoire, j'y arrive pas vraiment
La méthode qui fonctionne :
test2=`cat /chemin/fichier|grep Field`
test2=`UnXml $test2`

Est quand même mieux que l'absence de fonction, mais ça me force à rajouter une ligne.
j'ai essayé, le
test3=`UnXml `cat /chemin/fichier|grep Field``

mais 'bizarrement', ça n'a mas marché
j'ai essayé avec des parenthèses
`UnXml (commande)`

J'ai une erreur (substitution)
et des accolades
`UnXml { commande }` 

j'ai pas d'erreur, mais aucun affichage.
(idem pour apostrophes et guillemets, pas d'erreur, mais pas de retour)
0
dna.factory Messages postés 24942 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 22 avril 2024 1 609
29 avril 2015 à 11:03
ho et le petit malin (oui, c'est de toi que je parle) qui me dit que :
test2=`cat /chemin/fichier|grep Field`;test2=`UnXml $test2`

Ca fait une seule ligne, j'y ai déjà pensé :)
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615 > dna.factory Messages postés 24942 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 22 avril 2024
30 avril 2015 à 14:25
hello
et comme ça
$ UnXml() { awk -F "[<>]" '{print $3}' <<<"$1" ; }
$ UnXml "$(cat fichier)"
0
dna.factory Messages postés 24942 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 22 avril 2024 1 609
30 avril 2015 à 16:53
F "[<>]"
J'ai bien compris ?
On peut mettre de la regex dans le -F ?
je savais qu'on pouvait mettre des chaines, mais j'avais pas pensé au regex...
C'est über puissant :)
(dans certains cas, je faisait du sed avant le awk pour remplacer certains caractères par d'autres et avoir un seul séparateur, finalement, j'avais pas besoin...)
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
Modifié par dubcek le 30/04/2015 à 17:09
oui, FS peut-être regex ou chaine de car.
http://www.gnu.org/software/gawk/manual/gawk.html#Field-Separators
0