2010-02-09 8 views
2

J'essaie d'ouvrir un fichier journal et de manipuler des lignes si nécessaire. Par exempleProblème de commande de substitution Awk

2010-01-31 00:05:59,400 -0500 | [VHX4077ff8Ze1sTnE-op51V] | [TB-bce11b:-16a2-5ed9f542] | [6C7CA345F63F835CB353FF15BD6C5E052EXX8E7A | [email protected] | 31933782 | 172.9.8.3 | DEVICE_ID_CREATED]

Je dois modifier la colonne 5 et tout supprimer avant la Superfly. Essentiellement supprimer tout ce qui est là et le symbole '@'. Ce fichier aura des entrées où la colonne 5 n'a pas l'entrée numéro @ et cette ligne n'aura pas besoin d'être éditée. Et le nombre pourrait être n'importe quel nombre de chiffres avant le @. J'ai essayé d'utiliser la commande de remplacement d'awk mais je n'arrive pas à la faire fonctionner.

Mon script:

awk -F "|" {' sub(".*@","",$5) print $5 '} test.log 

awk: cmd. line:3: print $5
awk: cmd. line:3:^syntax error

Répondre

4
awk -F "|" {' sub(".*@","",$5); print $5 '} test.log 

manquant après la première déclaration.

+0

Mechs Merci, je reçois toujours une erreur après avoir essayé votre commande: awk: sous ("", 5 $ "* @."); imprimer $ 5 awk:^erreur de syntaxe – roacha

+0

awk -F "|" {'sub (". * @", "", $ 5); print $ 5 '} test.log de ma ligne de commande linux avec vos données d'échantillon donne "SuperFly" Votre interprète awk peut exiger un; après la dernière déclaration aussi awk -F "|" {'sub (". * @", "", $ 5); imprimer 5 $; '} test.log La mienne ne l'a pas fait. –

+0

En tant que FYI, je trouve généralement plus facile d'utiliser le paramètre -f et d'éditer un fichier. C'est plus lisible sur la route et beaucoup d'éditeurs ont pu noter la mauvaise syntaxe. –

1

éditez-vous le fichier entier et remplacez chaque ligne par la valeur de la colonne 5? sinon,

awk -F"|" '$5~/@/{ sub(".*@","",$5) }{print}' OFS="|" file 
Questions connexes