Couper des champs particuliers du fichier texte

Résolu/Fermé
rimrita Messages postés 18 Date d'inscription lundi 31 mars 2014 Statut Membre Dernière intervention 15 avril 2014 - 10 avril 2014 à 12:33
rimrita Messages postés 18 Date d'inscription lundi 31 mars 2014 Statut Membre Dernière intervention 15 avril 2014 - 11 avril 2014 à 14:35
Bonjour :hello: ,
Je veuv extraire les données suivantes de mon fichier date, client , from , to, relay
j'ai testé avec: cut -d: -f1,2,3,4,5,7,8 cleanlast>fin
mais le relay s'affiche pas et si j'ajoute cut -d: -f1,2,3,4,5,7,8,9 cleanlast>fin
les données de position 9 des autres ligne que je veux pas voir s'affiche aussi
voila comment mon fichier est structuré:
    Mar:2:05:14:10:[****]:RRRRRRRRR:client=unknown[***.***.***.***]:sasl_method=LOGIN sasl_username=rita
Mar:2:05:14:10:[****]:RRRRRRRRR:from=<rita@999>:size=11111nrcpt=1:(queue active)
Mar:2:05:14:11:[****]:RRRRRRRRRR:to=<000@rita>:relay=****.****.**.***[1***.***.**.***]:00:delay=0.00:delays=0.00/0.00/0.00/0.00:dsn=0.0.0:status=sent:(000:2.0.0:Ok queued as 00000000)
A voir également:

7 réponses

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
10 avril 2014 à 13:24
hello
awk permet des tests sur le contenu d'un champ
$ awk -F : '{$9 ~ /relay/? x=$9: x=""; print $1, $2, $3, $4, $5, $7, $8, x}' fichier
1
rimrita Messages postés 18 Date d'inscription lundi 31 mars 2014 Statut Membre Dernière intervention 15 avril 2014
10 avril 2014 à 15:40
cela m'a supprimer les séparateurs du fichier !!
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
Modifié par dubcek le 10/04/2014 à 15:55
essayer avec
awk 'BEGIN {FS=OFS=":"} {$9 ~/relay/? x=$9:x=""; print $1,$2,$3,$4,$5,$7,$8,x}' fichier
ou avec
awk 'BEGIN {FS=OFS=":"} {$9 ~/relay/? x=OFS $9:x=""; print $1,$2,$3,$4,$5,$7,$8 x}' fichier
pas de : en fin de ligne
0
rimrita Messages postés 18 Date d'inscription lundi 31 mars 2014 Statut Membre Dernière intervention 15 avril 2014
10 avril 2014 à 17:11
celà m'a multiplié les séparateurs
la premiére * 3
la deuxiéme *2
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
Modifié par dubcek le 11/04/2014 à 08:36
explique !
il y a des champs vides?
$ awk 'BEGIN {FS=OFS=":"} {$9 ~/relay/? x=OFS $9:x=""; print $1,$2,$3,$4,$5,$7,$8 x}' fichier
Mar:2:05:14:10:RRRRRRRRR:client=unknown[***.***.***.***]
Mar:2:05:14:10:RRRRRRRRR:from=<rita@999>
Mar:2:05:14:11:RRRRRRRRRR:to=<000@rita>:relay=****.****.**.***[1***.***.**.***]
$
0
rimrita Messages postés 18 Date d'inscription lundi 31 mars 2014 Statut Membre Dernière intervention 15 avril 2014
11 avril 2014 à 12:08
Non tous les champs sont attachés et séparés par ":"
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
11 avril 2014 à 12:12
Salut,

Un brin de courtoisie dans tes réponses ne serait pas superflu(e), ainsi que quelques explications sur l'origine de tes fichiers et des exemples concrets avec copier/coller.

Merci.
0
rimrita Messages postés 18 Date d'inscription lundi 31 mars 2014 Statut Membre Dernière intervention 15 avril 2014
11 avril 2014 à 12:16
mon fichier est un fichier log, j'ai réussi à extrarire la date l'id ,client le from et to. avec
cut -d: -f1,2,3,4,5,7,8 mais pour le relay si j'ajoute sa position, les données qui sont pas sur la meme ligne et sur la meme position s'affichent.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
11 avril 2014 à 12:19
Avec l'exemple donné dans ton 1er post, la commande de dubcek marche parfaitement, preuve s'il en est dans sa réponse #6. J'ai aussi fait le test chez moi et le résultat est le même.

Donc, c'est avec ton fichier original qu'il y a un problème. C'est un fichier de log issu de Windows ou de Linux ?
0
rimrita Messages postés 18 Date d'inscription lundi 31 mars 2014 Statut Membre Dernière intervention 15 avril 2014
11 avril 2014 à 12:21
mon fichier est issu du linux
0
rimrita Messages postés 18 Date d'inscription lundi 31 mars 2014 Statut Membre Dernière intervention 15 avril 2014
11 avril 2014 à 12:28
le probléme avec la derniére proposition le size s'affiche
0
rimrita Messages postés 18 Date d'inscription lundi 31 mars 2014 Statut Membre Dernière intervention 15 avril 2014
11 avril 2014 à 12:51
je peut pas poster copier coller car c'est confidentiel , j'ai remplacer les valeurs par des "*" et des "0" j'ai respercter le nombre de caractéres alors pour fichier initial comme ça:
Mar:2:08:27:34:client=unknown[***.***.***.***]:sasl_method=LOGIN
Mar:2:08:27:34: from=<rimrita@rimrita>:size=222222
Mar:2:08:27:35: to=<rita.rim@gmail.com>:relay=***.***.**.***[***.***.**.***]
::::::

avec la commande
$ awk 'BEGIN {FS=OFS=":"} {$9 ~/relay/? x=OFS $9:x=""; print $1,$2,$3,$4,$5,$7,$8 x}' tmp

la resultat est:

Mar:2:08:27:34:client=unknown[***.***.***.***]:sasl_method=LOGIN
Mar:2:08:27:34: from=<rimrita@rimrita>:size=222222
Mar:2:08:27:35: to=<rita.rim@gmail.com>:relay=***.***.**.***[***.***.**.***]
::::::
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
Modifié par dubcek le 11/04/2014 à 13:09
ne pas afficher une ligne dont les champs sont vides ?
$  awk 'BEGIN {FS=OFS=":"} $1 && $2 {$9 ~/relay/? x=OFS $9:x=""; print $1,$2,$3,$4,$5,$7,$8 x}' fichier
Mar:2:08:27:34:sasl_method=LOGIN:
Mar:2:08:27:34:size=222222:
Mar:2:08:27:35:relay=***.***.**.***[***.***.**.***]:
0
rimrita Messages postés 18 Date d'inscription lundi 31 mars 2014 Statut Membre Dernière intervention 15 avril 2014
11 avril 2014 à 13:11
dsl mon fichier de départ est j'ai copier 2 fois le fichier resultat mon fichier de départ est donc:
Mar:2:08:27:34:*********:client=unknown[***.***.***.***]:sasl_method=LOGIN:sasl_username=rima
Mar:2:08:27:34:*********: from=<rimrita@rimrita>:size=222222:nrcpt=1 (queue active)
Mar:2:08:27:35:*********: to=<rita.rim@gmail.com>:relay=***.***.**.***[***.***.**.***]:25:delay=0.82: delays=0.00/0.00/0.00/0.00:dsn=2.0.0:status=sent (*** 2.0.0 Ok: queued as ***********)
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
11 avril 2014 à 13:25
ou est le problème ?
$ awk 'BEGIN {FS=OFS=":"} {$9 ~/relay/? x=OFS $9:x=""; print $1,$2,$3,$4,$5,$7,$8 x}'  fichier2
Mar:2:08:27:34:client=unknown[***.***.***.***]:sasl_method=LOGIN
Mar:2:08:27:34: from=<rimrita@rimrita>:size=222222
Mar:2:08:27:35: to=<rita.rim@gmail.com>:relay=***.***.**.***[***.***.**.***]
$
0
rimrita Messages postés 18 Date d'inscription lundi 31 mars 2014 Statut Membre Dernière intervention 15 avril 2014
11 avril 2014 à 13:27
le probléme c'est que j'ai pas besoin des champs:
sasl_method=LOGIN
et
size=222222
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
11 avril 2014 à 14:22
comme ca ?
$ awk 'BEGIN {FS=OFS=":"} {$8 ~/relay/? x=OFS $8:x=""; print $1,$2,$3,$4,$5,$7 x}'  fichier
Mar:2:08:27:34:client=unknown[***.***.***.***]
Mar:2:08:27:34: from=<rimrita@rimrita>
Mar:2:08:27:35: to=<rita.rim@gmail.com>:relay=***.***.**.***[***.***.**.***]
0