Forum Programmation.shell boucle for en awk

Posté par  .
Étiquettes : aucune
0
10
nov.
2006
Bonjour, j'ai un pb de base mais que je n'arrive pas à résoudre avec un script shell et awk
J'ai deux fichiers
fichier a
1
3

fichier b
1 toto
2 titi
3 tata
4 tutu

Je veux avec les numéros contenus dans le fichier a, récupérer les lignes du fichier b en utilisant les valeurs de la première colonne du fichier b et créer ainsi un fichier c qui sera comme ça:
1 toto
3 tata

je veux utiliser awk (car un grep sous shell ne me convient pas si dans mon fichier b j'ai des colonnes avec des valeurs 10,11; car le grep me sortira aussi c'est valeur car il recherche du texte et non des nombres)

j'ai tenté le coup avec une boucle
"for var in tableau"
recherche du texte par awk
mais je n'arrive pas à créer un tableau en le remplissant par les valeurs du fichier a

Est ce que quelqu'un pourrait me donner la solution, cela fait deux jours que je sèche !!!!

Merci

Mick
  • # grep ??

    Posté par  . Évalué à 3.

    Bonjour, je ne répondrai pas sur la question du script awk, mais je n'ai pas compris ton argumentaire sur grep... Est-ce que ça ne marcherait pas en demandant à grep de chercher en début de ligne le nombre désiré suivi d'un espace ? :
    for i in `cat fichiera`
    do
        grep "^$i " fichierb
    done
    
    A+ JJD
    • [^] # Re: grep ??

      Posté par  . Évalué à 1.

      non car si dans mon fichier b j'ai la liste suivante
      1 toto
      2 tata
      3 titi
      4 tutu
      10 tyty

      et que mon fichier a contient
      1
      3

      si tu fais un grep il te sort
      1 toto
      3 titi
      10 tyty

      car grep fait une recherche sur le texte et pas en tenant compte que ta variable i dans ta boucle est un nombre

      Mick
      • [^] # Re: grep ??

        Posté par  . Évalué à 1.

        Meu non. Il y a un blanc pour éviter ça (perso j'aurai plutot utilisé [^0-9]).
        • [^] # Re: grep ??

          Posté par  . Évalué à 1.

          désolé mais je viens d'essayer avec un blanc et cela ne marche pas
          de plus l'autre solution [^0-9] elle n'est valable que pour des chiffres entre 0 et 9 ?
          si maintenant j'ai dans mon fichier a
          1
          61
          101

          et dans mon fichier b
          1
          2
          3
          59
          61
          100
          101

          est ce que ta solution va marcher ?

          Mick
          • [^] # Re: grep ??

            Posté par  . Évalué à 2.

            Oui ça marche très bien :

            $ while read n; do grep "^$n[^0-9]\\|^$n\$" b; done <a
            1
            61
            101

            Ceci dit je suis heureux de découvrir join... Merci.
  • # commande qui existe "join"

    Posté par  (site web personnel) . Évalué à 6.

    join a b

    :)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.