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

Résolu
Nebbb -  
 Nebbb -
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...

4 réponses

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    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 ;-)
    0
  2. Nebbb
     
    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...
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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% *}"
      ;-))
      0
  3. Nebbb
     
    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
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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)
      0
  4. Nebbb
     
    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.
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      < <(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.
      0
    2. Nebbb
       
      Ah ok, merci beaucoup pour ton aide.
      0