Script ksh awk grep

Fermé
touillettes - 15 juil. 2009 à 15:58
 touillettes - 16 juil. 2009 à 15:33
Bonjour,

Un petit probleme se pose a moi pour la réalisation d'un script shell ksh.
Via la commande errpt | head -2 | tail -1 je recupére la ligne d'erreur que je veux (La voiçi
A6DF45AA 0707170809 I O RMCdaemon The daemon is started.) je souhaiterai éffectuer un filtre au niveau du premier champs (A6DF45AA ) via un fichier qui ressemblerai a sa :
Fichier :
A6DF45AA
A6TPER85
RT85PLM8
...

il faudrai que je compare le premier champ au contenu de ce fichier dans le but que le script ne traite la ligne que si le code est différent de ceux fourni dans le fichier .
Auriez vous une idée ?
Merci d'avance
A voir également:

5 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
15 juil. 2009 à 16:08
Salut,

Une solution parmi d'autres...
[tmpfs]$ cat plop
A6DF45AA
A6TPER85
RT85PLM8

[tmpfs]$ grep -q "$(echo "A6DF45AA 0707170809 I O RMCdaemon The daemon is started." |awk '{print $1}')" plop

[tmpfs]$ echo $?
0
[tmpfs]$ grep -q "$(echo "B6DF45AA 0707170809 I O RMCdaemon The daemon is started." |awk '{print $1}')" plop

[tmpfs]$ echo $?
1

[tmpfs]$
$? correspond au code retour, suffit de le tester en sortie et de lancer le traitement en fonction...
0
ok mais la tu es obliger de tester chaque code a la main non ? moi je vais avoir un fichier avec 300 code dedans et je voudrai que ce soit automatique ptet que je n'ai pas compris ta solution :~
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897 > touillettes
15 juil. 2009 à 16:30
Effectivement, ou tu n'as pas bien compris ou c'est moi ;-\

Mon exemple récupère le 1er champ de la ligne que tu récupères via la commande "errpt | head -2 | tail -1" et fait une recherche dans le fichier (ici il n'y a que les 3 noms que tu as donné en exemple mais il pourrait y en avoir des centaines voire des milliers) et retourne un code d'erreur (0 pour vrai et 1 pour faux), en fonction de ce code, tu traites ta ligne ou pas ;-))
0
touilettes > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
15 juil. 2009 à 17:35
Merci c'est moi qui avait mal compris désolé :) je test sa demain
0
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
16 juil. 2009 à 09:54
hello
avec awk
$ cat data
A6DF45AA
A6TPER85
RT85PLM8

$ cat data2
A6DF45AA 0707170809 I O RMCdaemon The daemon is started
A6DF45xx 0707170809 I O RMCdaemon The daemon is started
RT85PLM8 0707170809 I O RMCdaemon The daemon is started

$ awk 'BEGIN{while("cat data"|getline)x[$1]=$1}; {if(x[$1] != $1) print $0}' < data2
A6DF45xx 0707170809 I O RMCdaemon The daemon is started
$
0
Je comprend pas trop comment sa marche ton script :$ Pourrait tu m'expliquer ?
0
a j'ai compris mais la ta besoin de 2 fichier or que moi j'attrape ce que tu met dans data2 via une commande il ya moyen ou pas ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
16 juil. 2009 à 13:30
BEGIN{while("cat data"|getline)x[$1]=$1}
d'abord, on lit le fichier data ligne par ligne, lignes que l'on stocke dans un tableau x en utilisant le champ $1 comme index : x[A6DF45AA]=A6DF45AA, etc

{if(x[$1] != $1) print $0}' < data2
pour chaque ligne de data2, si x[$1] n'est pas égal à $1, cela veut dire que le champ $1 ne se trouve pas dans le tableau x, donc $1 n'est pas présent dans le fichier data alors on l'imprime (ou on le traite autrement)

j'utilise data2, mais tu peux faire
commande ¦ awk 'BEGIN{while("cat data"|getline)x[$1]=$1}; {if(x[$1] != $1) print $0}'
0
Ok Merci :)
0