Fonction grep dans une if

Résolu
PhillipeG -  
 PhillipeG -
Bonjour,
je débute en shell et je suis un peu perdu depuis quelques heures. Je possède un fichier text avec 1 colonne de nombre. Ces nombres apparaissent entre 0 et 2 fois et je voudrais effectuer une action en fonction du nombre de leur apparition. J'ai fait un programme avec la fonction grep -c mais cela ne fonctionne pas et je pense que c'est une erreur de structure de ma part mais je ne vois pas.
Voici le programme:

last_number=$(tail -1 test.txt)
for ((i=0 ; $last_number - $i ; i++))
do
if [ "grep -c ^$i$ test.txt" -eq 2];then echo "$i: twice" >> settings.txt 
elif [ "grep -c ^i$ test.txt" -eq 1]; then echo "$i: once" >> settings.txt
else echo "$i non présent" >> settings.txt
fi
done


je vous remercie d'avance.

2 réponses

  1. Utilisateur anonyme
     
    salut,

    le deuxième argument de l'évaluation arithmétique de l'instruction
    for
    ne peut pas être un calcul.
    quelle est la condition pour arrêter la boucle ?

    dans les
    if
    ,
    grep
    doit être dans une substitution de commande, et il faut respecter les espaces.

    vous écrivez vos codes d'un trait sans tester pas à pas ?
    avant de courir, ... !!!
    0
    1. PhillipeG
       
      j'ai déjà utilisé ce genre de structure dans une boucle for et ça ne m'a jamais posé de soucis.
      La c'est vraiment le grep qui pose problème mais je n'arrive pas à corriger mon erreur.
      0
    2. PhillipeG
       
      j'ai compris qu'il me manquait un espace, tout fonctionne cependant je n'ai pas le résultat souhaité. si les chiffres n'apparaissent qu'une fois il ne va pas dans le "elif" mais dans le "else"
      0
  2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    On peut voir la tronche de ton fichier d'entrée (test.txt) s'il te plaît ?
    tout fonctionne cependant je n'ai pas le résultat souhaité

    Il y a tellement d'erreurs et d'incohérences que je ne pense pas que ça puisse fonctionner ;-\

    0
    1. PhillipeG
       
      Mon fichier d'entrée c'est une colonne avec des nombres croissants pas forcément continue et qui peuvent apparaître jusqu'à deux fois de suite, par exemple:
      1
      1
      3
      4
      5
      6
      6
      12
      13
      13
      14

      Après je débute je teste beaucoup de chose et j'ai pas toujours conscience de ce que j'écris dans le code :p
      0
      1. manuel > PhillipeG
         
        $ cat foo.sh 

        #! /bin/bash
        #set -x
        
        last_number=$(tail -1 plop)
        for ((i=0 ; ${last_number} - ${i} ; i++))
        do
        if [ "$(grep -c ^${i}$ plop)" -eq 2 ];then echo "${i} : twice" >> settings.txt 
        elif [ "$(grep -c ^${i}$ plop)" -eq 1 ]; then echo "${i} : once" >> settings.txt
        else echo "${i} non présent" >> settings.txt
        fi
        done


        $ ./foo.sh 


        $ cat settings.txt 
        0 non présent
        1 : twice
        2 non présent
        3 : once
        4 : once
        5 : once
        6 : twice
        7 non présent
        8 non présent
        9 non présent
        10 non présent
        11 non présent
        12 : once
        13 : twice


        PS. plop c'est le nom de mon fichier contenant les données (test.txt chez toi)
        0
    2. PhillipeG
       
      Cela fonctionne manuel. Merci à tous!
      0