Rechercher : dans
Par :

Script ksh awk grep

Dernière réponse le 16 jui 2009 à 15:33:30 touillettes, le 15 jui 2009 à 15:58:14 
 Signaler ce message aux modérateurs

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

Configuration: Windows XP

Meilleures réponses pour « Script ksh awk grep » dans :
Transformer des colonnes en lignes dans un fichier VoirDifférents outils de Linux sont très doués pour travailler avec des lignes, mais pas avec des colonnes (c'est leur rôle) Sed, Awk, Grep, etc. Cependant, il peut arriver pour X raisons que vous ayez un fichier où les données sont à lire en...
[IE] Erreur de script / Effectuer un débogage VoirDe temps en temps, lorsque vous naviguez sur le Net et que vous chargez une page Web, un message d'erreur de script survient : Une erreur est survenue. Une erreur est survenue sur le script de cette page. Souhaitez-vous effectuer un débogage...
Exécuter un script shell VoirExécution d'un script Pour pouvoir exécuter un script ou un programme en ligne de commande il y a plusieurs possibilités : 1. Le chemin absolu 2. Le chemin relatif 3. Modifier la variable PATH Note: Le Sha...

1

jipicy, le 15 jui 2009 à 16:08:00

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...
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

2

touillettes, le 15 jui 2009 à 16:15:25

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 :~

Répondre à touillettes

3

jipicy, le 15 jui 2009 à 16:30:24

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 ;-))
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

4

touilettes, le 15 jui 2009 à 17:35:19

Merci c'est moi qui avait mal compris désolé :) je test sa demain

Répondre à touilettes

5

dubcek, le 16 jui 2009 à 09:54:19

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
$

Répondre à dubcek

6

touillettes, le 16 jui 2009 à 13:05:01

Je comprend pas trop comment sa marche ton script :$ Pourrait tu m'expliquer ?

Répondre à touillettes

7

touillettes, le 16 jui 2009 à 13:18:06

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 ?

Répondre à touillettes

8

dubcek, le 16 jui 2009 à 13:30:38

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}'

Répondre à dubcek

9

 touillettes, le 16 jui 2009 à 15:33:30

Ok Merci :)

Répondre à touillettes