Couper des champs particuliers du fichier texte [Résolu/Fermé]

Signaler
Messages postés
18
Date d'inscription
lundi 31 mars 2014
Statut
Membre
Dernière intervention
15 avril 2014
-
Messages postés
18
Date d'inscription
lundi 31 mars 2014
Statut
Membre
Dernière intervention
15 avril 2014
-
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)

7 réponses

Messages postés
18231
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 octobre 2020
5 045
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
18
Date d'inscription
lundi 31 mars 2014
Statut
Membre
Dernière intervention
15 avril 2014

cela m'a supprimer les séparateurs du fichier !!
Messages postés
18231
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 octobre 2020
5 045
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
Messages postés
18
Date d'inscription
lundi 31 mars 2014
Statut
Membre
Dernière intervention
15 avril 2014

celà m'a multiplié les séparateurs
la premiére * 3
la deuxiéme *2
Messages postés
18231
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 octobre 2020
5 045
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***.***.**.***]
$
Messages postés
18
Date d'inscription
lundi 31 mars 2014
Statut
Membre
Dernière intervention
15 avril 2014

Non tous les champs sont attachés et séparés par ":"
Messages postés
18
Date d'inscription
lundi 31 mars 2014
Statut
Membre
Dernière intervention
15 avril 2014

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.
Messages postés
35703
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 octobre 2020
5 575
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 ?
Messages postés
18
Date d'inscription
lundi 31 mars 2014
Statut
Membre
Dernière intervention
15 avril 2014

mon fichier est issu du linux
Messages postés
18
Date d'inscription
lundi 31 mars 2014
Statut
Membre
Dernière intervention
15 avril 2014

le probléme avec la derniére proposition le size s'affiche
Messages postés
35703
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 octobre 2020
5 575
$ cat plop 
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)

$ awk 'BEGIN {FS=OFS=":"} {$9 ~/relay/? x=OFS $9:x=""; print $1,$2,$3,$4,$5,$7,$8 x}' plop
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***.***.**.***]

Peux-tu refaire le même test chez toi et le poster ici en copier/coller ?
Messages postés
18
Date d'inscription
lundi 31 mars 2014
Statut
Membre
Dernière intervention
15 avril 2014

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=***.***.**.***[***.***.**.***]
::::::
Messages postés
18
Date d'inscription
lundi 31 mars 2014
Statut
Membre
Dernière intervention
15 avril 2014

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 ***********)
Messages postés
18231
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 octobre 2020
5 045
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=***.***.**.***[***.***.**.***]
$
Messages postés
18
Date d'inscription
lundi 31 mars 2014
Statut
Membre
Dernière intervention
15 avril 2014

le probléme c'est que j'ai pas besoin des champs:
sasl_method=LOGIN
et
size=222222
Messages postés
18231
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 octobre 2020
5 045
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=***.***.**.***[***.***.**.***]
Messages postés
18
Date d'inscription
lundi 31 mars 2014
Statut
Membre
Dernière intervention
15 avril 2014

oui ça marche :)