Help! while avec awk

Résolu
cosmokat Messages postés 7 Statut Membre -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

je suis coincé avec un problème de boucle dans awk:

FREQ=`/bin/awk -v F="" 'BEGIN NR==2 {i=14 };

while ($i /^[0-9][0-9]*$/)
{ F=$F"&"$i
i++
}

END {print $F; exit}' /home/omc/test/FILE`

Les enregistrements 14 à 26 du fichier FILE ligne 2 sont des nombres et je veux affecter à
FREQ la valeur &$14&$15&16...&$26

Est ce que qq un peut me dépanner ?

8 réponses

  1. cosmokat Messages postés 7 Statut Membre
     
    J ai essayé sans while et ç est pareil

    FREQ=`/bin/awk -v F="" 'BEGIN NR==2 { i=14 }

    $i /^[0-9][0-9]*$/ { F=F"&"$i ; i++ }

    END { print F; exit }' /home/omc/CT2000/ExportCT/RITLS`

    > awk: syntax error near line 1
    > awk: bailing out near line 1

    snif !
    0
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Tu peux afficher le contenu de ton fichier "FILE" s'il te plaît, parce que là sans exemple précis c'est pas facile d'évaluer ton code.
    Merci ;-))
    0
  3. cosmokat Messages postés 7 Statut Membre
     
    Voici la ligne 2 du fichier FILE

    3 134 AA BB CC 0 1 3 6 14 12800 46486 14 28 29 30 31 32 33 34 35 36 37 38 39 40 DD

    Je voudrai obtenir FREQ=28&29&30...&40
    0
  4. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Re-

    Essaie ça (adapte en fonction) :
    #! /bin/bash
    
    FREQ=$(/bin/awk -v G="" 'BEGIN {
    i=14
    }
    {
    while ( $i~/^[0-9][0-9]*$/ ) { 
    G=G"&"$i
    i++
    }
    }
    END {
    print G; exit
    }' /home/jp/tmpfs/FILE.txt)
    
    echo "FREQ="$FREQ
    exit
    Ce qui donne chez moi :
    [jp@MDK tmpfs]$ cat FILE.txt
    
    ceci est un exemple
    3 134 AA BB CC 0 1 3 6 14 12800 46486 14 28 29 30 31 32 33 34 35 36 37 38 39 40 DD
    fin de l'exemple
    
    [jp@MDK tmpfs]$ ./essai.sh
    
    FREQ=&28&29&30&31&32&33&34&35&36&37&38&39&40
    
    [jp@MDK tmpfs]$
    ;-))
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. cosmokat Messages postés 7 Statut Membre
     
    Merci pour la solution en /bin/bash

    En fait je voudrai poursuivre en sh
    je remarque que c' est l option -v qui pose problème.

    Lorsque je remplace /bin/awk par /usr/xpg4/bin/awk
    y a plus de pb avec l option -v mais du coup je dois réécrire
    la boucle différement et je connais pas la particularité xpg4...
    0
  7. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Ben essaie comme ça alors :
    #! /bin/sh
    
    FREQ=$(/bin/awk 'BEGIN {
    G=""
    i=14
    }
    {
    while ( $i~/^[0-9][0-9]*$/ ) { 
    G=G"&"$i
    i++
    }
    }
    END {
    print G; exit
    }' /home/jp/tmpfs/FILE.txt)
    
    echo "FREQ="$FREQ
    exit
    ;-))
    0
  8. cosmokat Messages postés 7 Statut Membre
     
    Un grand merci jipicy !
    Ton script m a permis de ne pas utiliser -v
    Et à la différence de $( ) qui pour moi est ` ` ça marche !!!!!!

    $ FREQ=`/bin/awk 'BEGIN { F="" ; i=14 }
    > { while( $i~/^[0-9][0-9]*$/ ) { F=F"&"$i ; i++ } }
    > END{ print F; exit }' /home/omc/TEST/FILE`
    $ echo $FREQ
    &28&29&30&31&32&33&34&35&36&37&38&39&40
    $
    0
  9. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    De rien ;-))
    0