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

Résolu
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. Contributeur
    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
    1. 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. Contributeur
        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
    2. 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. Contributeur
        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
    3. 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. Contributeur
        < <(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. Ah ok, merci beaucoup pour ton aide.
        0