Probleme avec le script shell

Résolu
Bonjour,

Bonjour
je voudrais une recherche dans un fichier par rapport un fichier quand je lance le script il me cherche la derniere ligne du fichier ce qui n'est pas normale.exemple: fichier a:le contenu
111111
222222
333333
et le fichier b
000000,2457879
111111,9586245
222222,4569874
333333,4569874
444444,1236541
555555,4562258

voila les deux fichier a doit forcement se trouver dans le fichier b
c'est comme ca que je lance le script.
./SERIAL.sh fichier a fichier b &
et il ne m'envoi que la derniere ligne
voila mon script

#!/bin/bash
f1=$1
f2=$2

for i in 'cat $f1'
do
grep $i $f2 | awk -F, '{print $2","$1}' >> Code_en_serie.txt

done


cordialement

5 réponses

  1. Contributeur
    hello
    on peut tout faire dans awk
    $ awk -F, 'NF==1 {x[$1]=$1} NF > 1 {if(!x[$1])print $2 FS $1}' fichiera fichierb
    2457879,000000
    1236541,444444
    4562258,555555
    $  
    
    1. je n'ai pas compris ton script le NF c'est quoi au juste
      tu as compri mon souci ce awk pourra l'executer
      1. Contributeur
        NF représente le nombre de champs par ligne. Avec NF==1 on traite fichiera et avec NF > 1 on traite fichierb
    2. Modérateur
      Salut,

      Y'a une erreur de syntaxe dans ton code :
      for i in 'cat...'
      à remplacer par
      for i in $(cat $f1)

      #!/bin/bash
      f1=$1
      f2=$2
      
      for i in $(cat $f1)
      do
      grep $i $f2 | awk -F, '{print $2","$1}' >> Code_en_serie.txt
      
      done 
      1. il ne reconnais pas le $f1
        1. Modérateur
          Bizarre ;-\

          Quel système ?

          $ ls
          a  b  foo*
          
          $ cat a
          111111
          222222
          333333
          
          $ cat b
          000000,2457879
          111111,9586245
          222222,4569874
          333333,4569874
          444444,1236541
          555555,4562258
          
          $ cat foo
          #!/bin/bash
          f1=$1
          f2=$2
          
          for i in $(cat $f1)
          do
          grep $i $f2 | awk -F, '{print $2","$1}' >> Code_en_serie.txt
          
          done
          
          $ ./foo a b
          
          $ cat Code_en_serie.txt
          9586245,111111
          4569874,222222
          4569874,333333
          
          $