Téléchargement
illégal
Posez votre question Signaler

[sh] utilisation d'un script awk dans un sh [Résolu]

Nebbb - Dernière réponse le 10 janv. 2011 à 23:31
Bonjour,
J'ai un script awk qui traite un fichier tsv. En l'appelant avec cette commande :
cat ../donnee/geolocalisation.tsv | ./communesVoisines.awk -vLONGITUDE=45.343432 -vLATITUDE=-12.232321 | sort | head -5
je récupère ainsi 5 lignes sous cette forme :
0.0368543 014-327
0.0383347 014-437
0.0390129 014-271
0.0391931 014-242
0.0424154 014-383
J'aimerais récupérer ce résultat dans un script shell et pouvoir différencier les 2 champs qui compose chaque ligne.
J'ai beaucoup cherché et j'en viens à me demander si c'est possible ou non...
Lire la suite 

[sh] utilisation d'un script awk dans un sh »

8 réponses
Réponse
+0
moins plus
Salut,

Tout dépend de comment seront exploités chacun des 2 champs par la suite...
Expliques-nous ce que tu veux en faire exactement par la suite, ce sera plus simple ;-)
Ajouter un commentaire
Réponse
+0
moins plus
En fait pour chaque sortie du type 0.0368543 014-327, j'ai besoin de récupérer et de stocker le deuxième champs ( 014-327 ) pour le mettre en paramètre d'un 3eme script...
zipe31- 10 janv. 2011 à 22:50
Là encore tout dépend comment doit être passé le paramètre ? Tout seul ? Groupé ?

Voilà déjà une façon de récupérer chaque deuxième champ avec une boucle :

$ cat fich
0.0368543 014-327
0.0383347 014-437
0.0390129 014-271
0.0391931 014-242
0.0424154 014-383

$ while read line; do echo "${line#* }";done < fich
014-327
014-437
014-271
014-242
014-383

$

Pour récupérer le 1er il suffit de changer "${line#* }" par "${line% *}"
;-))
Ajouter un commentaire
Réponse
+0
moins plus
C'est comme ça aussi que je pensais faire mais je ne peux pas faire simplement un done < fich, j'ai besoin de plusieurs pipes et de passer des paramètres dans la commande pour obtenir ceci : 0.0368543 014-327

Il faudrait que je fasse quelques chose dans ce genre là :
while read line; do echo "${line#* }";done < cat ../donnee/geolocalisation.tsv | ./communesVoisines.awk -vLONGITUDE=45.343432 -vLATITUDE=-12.232321 | sort | head -5

Mais évidemment ça ne fonctionne pas...

Sinon pour le 3eme script, je passe mon argument simplement comme ça :
echo -e $variable | ./population.awk
ici $variable est sensée être "014-327"...

J'espère que c'est plus clair, en tout cas je te remercie profondément de t'intéresser à mon problème Zipe
zipe31- 10 janv. 2011 à 23:14
Essaies comme ça :

while read line; do \
./population.awk  <<<"${line#* }" \
done < <(cat ../donnee/geolocalisation.tsv | ./communesVoisines.awk -vLONGITUDE=45.343432 -vLATITUDE=-12.232321 | sort | head -5)
Ajouter un commentaire
Réponse
+0
moins plus
Et bien je n'ai plus qu'à te tirer mon chapeau à te dire un grand merci !
Ça marche au poil !

par curiosité, qu'est ce que veux dire exactement ce "< <" ?
et j'imagine que <<< est une sorte de | inversé...

Encore merci beaucoup.
zipe31- 10 janv. 2011 à 23:29
< <(commande1 | commande2)
ou
< $(commande1 | commande2)

Sont 2 syntaxes de redirection pour passer des commandes via ce genre de boucle.

Quant à <<< "${VAR}" c'est une façon de passer une variable en entrée à une commande.
Nebbb - 10 janv. 2011 à 23:31
Ah ok, merci beaucoup pour ton aide.
Ajouter un commentaire
Ce document intitulé « [sh] utilisation d'un script awk dans un sh » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?