Script ksh awk grep
touillettes
-
touillettes -
touillettes -
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
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:
- Script ksh awk grep
- Script vidéo youtube - Guide
- Ghost script - Télécharger - Polices de caractères
- Mas script - Accueil - Windows
- Script cmd - Guide
- Awk gsub ✓ - Forum Shell
5 réponses
Salut,
Une solution parmi d'autres...
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...
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
$
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
$
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 ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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}'
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}'
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 ;-))