Concaténer des chaînes dans awk
J'ai un fichier de log qui j'ai besoin de "replay" sur le serveur.
Il contient des entrées comme ceci:
Request:
query: EXEC prc_insert_customer
@param0: 110040851
@param1: 137463
@param2: user@example.com
@param3: John
@param4: Smith
@param5: Some address
@param6:
@param7:
@param8: Some city
@param9: GBR
@param10: POSTCODE
@param11: (555) 123-45-67
Response:
...
J'ai besoin de convertir chaque morceau comme ça dans
EXEC prc_insert_customer '110040851', '137463', ..., '(555) 123-45-67'
J'ai essayé d'utiliser awk:
/EXEC prc_insert_customer/ {
str = "EXEC prc_insert_customer";
}
str && /@param/ {
if ($1 == "@param0:")
sep = ""
else
sep = ","
str = ((str) (sep) " '"($2) ("'"))
}
/^Response/ {
if (str)
print str
str = ""
}
mais le résultat que j'obtiens est:
', '(555)'DE', '', 'Some', 'GBR0851
Comment puis-je obtenir de bons résultats?
- Je utiliser GNU Awk 4.0.0
sur Fedora 17
.
OriginalL'auteur Quassnoi | 2012-06-06
Vous devez vous connecter pour publier un commentaire.
Si les fichiers journaux Windows, alors vous êtes presque certainement affaire avec les effets secondaires (touche? ;->) du mal ^M char. Il peut sans aucun doute produire des problèmes que vous décrivez.
devrait aider.
C'est une véritable Ctrl-M char et pas 2 caractères'^','M', produite dans un vi conforme de l'éditeur en appuyant sur Ctrl-V et tne Ctrl-M.
J'espère que cette aide.
sub(/\r/, "", $0)
de sorte que vous n'avez pas le fouillis d'un saut de ligne dans votre script. Vous pouvez également utiliser/\015/
.OriginalL'auteur shellter
Une légère variation de cet extrait de code fera l'affaire:
Cette affiche pour moi:
Testé avec
awk version 20070501
etGNU Awk 4.0.0
sur Mac OSX., (555)123-45-67omstomer 110040851
Après l'édition, la production a légèrement changé:
', '(555)123-45-67tyomer '110040851
. Toujours précédées de la lignes de log.Il semble qu'il n'y a aucun moyen d'éviter l'impression de lignes d'entrée lors de l'utilisation de la pratique
/from/, /to/
de la syntaxe.La nouvelle version imprime rien pour moi. Qui
awk
version utilisez-vous?Je l'ai testé avec
awk version 20070501
etGNU Awk 4.0.0
et de recevoir la cohérence des résultats lors de l'appel comme ceci:awk -f test.awk < input.txt
.OriginalL'auteur mavam