Script shell : sed + awk
Résolu/Fermé
Unicorn777
Messages postés
30
Date d'inscription
jeudi 2 août 2007
Statut
Membre
Dernière intervention
9 septembre 2008
-
6 nov. 2007 à 23:04
Unicorn777 Messages postés 30 Date d'inscription jeudi 2 août 2007 Statut Membre Dernière intervention 9 septembre 2008 - 7 nov. 2007 à 00:15
Unicorn777 Messages postés 30 Date d'inscription jeudi 2 août 2007 Statut Membre Dernière intervention 9 septembre 2008 - 7 nov. 2007 à 00:15
A voir également:
- Script shell : sed + awk
- Script vidéo youtube - Guide
- Classic shell windows 11 - Télécharger - Personnalisation
- Ghost script - Télécharger - Polices de caractères
- Script bat - Guide
- Microsoft activation script - Accueil - Windows
6 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
6 nov. 2007 à 23:09
6 nov. 2007 à 23:09
Salut,
J'espère avoir été clair :s
Sinon n'hésitez pas à me demander de rééxpliquer !
Ben pas très, enfin si mais ce serait mieux si tu nous affichais un exemple de ce qui entre d'un côté et ce que tu voudrais qu'il sorte de l'autre, histoire qu'on s'entende bien sur ce qu'il faut faire ;-))
J'espère avoir été clair :s
Sinon n'hésitez pas à me demander de rééxpliquer !
Ben pas très, enfin si mais ce serait mieux si tu nous affichais un exemple de ce qui entre d'un côté et ce que tu voudrais qu'il sorte de l'autre, histoire qu'on s'entende bien sur ce qu'il faut faire ;-))
Unicorn777
Messages postés
30
Date d'inscription
jeudi 2 août 2007
Statut
Membre
Dernière intervention
9 septembre 2008
2
6 nov. 2007 à 23:25
6 nov. 2007 à 23:25
en entré un fichier du type :
en sortie il me faut :
avec "#chan", "admin" et "user" pouvant changer
Pour le moment j'ai quelque chose qui ressemble à ça, mais il faudrais que j'arrive a recuperer ce qui match avec ma regexp pour le piper avec awk:
J'espère que c'est un peu plus clair...
En tout cas merci beaucoup pour la rapidité de la reponse !
11:11:11 < user> Bonjour 22:22:22 <-- admin has kicked user from #chan 23:33:33 < user> Au revoir
en sortie il me faut :
11:11:11 < user> Bonjour 22:22:22 -!- user was kicked from #chan by admin 23:33:33 < user> Au revoir
avec "#chan", "admin" et "user" pouvant changer
Pour le moment j'ai quelque chose qui ressemble à ça, mais il faudrais que j'arrive a recuperer ce qui match avec ma regexp pour le piper avec awk:
sed -i 's/[0-9]{2}:[0-9]{2}:[0-9]{2} <-- .[^ ]+ has kicked .[^ ]+ from/awk -F ' ' '{ print $1" -!- "$6" was kicked from "$8" by "$3" ["$3"]" }'/g' log_file
J'espère que c'est un peu plus clair...
En tout cas merci beaucoup pour la rapidité de la reponse !
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
6 nov. 2007 à 23:39
6 nov. 2007 à 23:39
Et simplement avec "awk" ç'est pas bon ?
awk ' $5 !~ /kicked/ { print $0} $5 ~ /kicked/ { print $1" -!- "$6" was kicked from "$8" by "$3 }' fichierCe qui donne :
$ cat plop 11:11:11 < user> Bonjour 22:22:22 <-- admin has kicked user from #chan 23:33:33 < user> Au revoir $ awk ' $5 !~ /kicked/ { print $0} $5 ~ /kicked/ { print $1" -!- "$6" was kicked from "$8" by "$3 }' plop 11:11:11 < user> Bonjour 22:22:22 -!- user was kicked from #chan by admin 23:33:33 < user> Au revoir $;-))
Unicorn777
Messages postés
30
Date d'inscription
jeudi 2 août 2007
Statut
Membre
Dernière intervention
9 septembre 2008
2
6 nov. 2007 à 23:45
6 nov. 2007 à 23:45
Est ce que ca remplace toutes les occurrences si il y en a plusieurs (avec des user et admin différents)
Et je t'en demande encore un peu... je découvre juste awk aujourd'hui.. donc si c'était possible d'avoir une explication sur la ligne, plutôt que de la copier simplement je t'en serais vraiment très reconnaissant !
Je teste ça et je vois ce que ça donne !
Merci pour tout !
edit : ça fait bien toutes les occurrences, par contre ca ne modifie pas directement dans le fichier comme dans sed -i
Et je t'en demande encore un peu... je découvre juste awk aujourd'hui.. donc si c'était possible d'avoir une explication sur la ligne, plutôt que de la copier simplement je t'en serais vraiment très reconnaissant !
Je teste ça et je vois ce que ça donne !
Merci pour tout !
edit : ça fait bien toutes les occurrences, par contre ca ne modifie pas directement dans le fichier comme dans sed -i
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
7 nov. 2007 à 00:06
7 nov. 2007 à 00:06
Tiens essaye ça aussi avec "sed" :
$5 !~ /kicked/ { print $0}
Si le champ 5 ($5) est différent ( !~) du mot "kicked" on imprime la ligne
$5 ~ /kicked/ { print $1...$6... }
Si le champ 5 ($5) est identique (~) au mot "kicked" on imprime la ligne formatée
sed -r '/kicked/ s/([^ ]*) <-- ([^ ]*) has kicked ([^ ]*) from (.*)/\1 -!- \3 was kicked from \4 by \2/' plopCe qui donne avec des admins et des users différents :
$ cat plop 11:11:11 < user> Bonjour 22:22:22 <-- admin has kicked user from #chan 23:33:33 < user> Au revoir 1:11:11 < user> Bonjour 22:22:22 <-- admin1 has kicked user1 from #chan 23:33:33 < user> Au revoir 1:11:11 < user> Bonjour 22:22:22 <-- admin2 has kicked user2 from #chan 23:33:33 < user> Au revoir 1:11:11 < user> Bonjour 22:22:22 <-- toto has kicked charlot from #chan 23:33:33 < user> Au revoir $ sed -r '/kicked/ s/([^ ]*) <-- ([^ ]*) has kicked ([^ ]*) from (.*)/\1 -!- \3 was kicked from \4 by \2/' plop 11:11:11 < user> Bonjour 22:22:22 -!- user was kicked from #chan by admin 23:33:33 < user> Au revoir 1:11:11 < user> Bonjour 22:22:22 -!- user1 was kicked from #chan by admin1 23:33:33 < user> Au revoir 1:11:11 < user> Bonjour 22:22:22 -!- user2 was kicked from #chan by admin2 23:33:33 < user> Au revoir 1:11:11 < user> Bonjour 22:22:22 -!- charlot was kicked from #chan by toto 23:33:33 < user> Au revoir $Et idem avec "awk" :
$ awk ' $5 !~ /kicked/ { print $0} $5 ~ /kicked/ { print $1" -!- "$6" was kicked from "$8" by "$3 }' plop 11:11:11 < user> Bonjour 22:22:22 -!- user was kicked from #chan by admin 23:33:33 < user> Au revoir 1:11:11 < user> Bonjour 22:22:22 -!- user1 was kicked from #chan by admin1 23:33:33 < user> Au revoir 1:11:11 < user> Bonjour 22:22:22 -!- user2 was kicked from #chan by admin2 23:33:33 < user> Au revoir 1:11:11 < user> Bonjour 22:22:22 -!- charlot was kicked from #chan by toto 23:33:33 < user> Au revoirPour les explications avec "awk" :
$5 !~ /kicked/ { print $0}
Si le champ 5 ($5) est différent ( !~) du mot "kicked" on imprime la ligne
$5 ~ /kicked/ { print $1...$6... }
Si le champ 5 ($5) est identique (~) au mot "kicked" on imprime la ligne formatée
Unicorn777
Messages postés
30
Date d'inscription
jeudi 2 août 2007
Statut
Membre
Dernière intervention
9 septembre 2008
2
7 nov. 2007 à 00:15
7 nov. 2007 à 00:15
Merci beaucoup !
C'est vraiment genial !!!!
C'est vraiment genial !!!!