Fonction grep dans une if
Résolu
PhillipeG
-
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:
je vous remercie d'avance.
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
-
salut,
le deuxième argument de l'évaluation arithmétique de l'instructionfor
ne peut pas être un calcul.
quelle est la condition pour arrêter la boucle ?
dans lesif
,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, ... !!! -
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 ;-\
-
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$ 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)
-
-