Couper des champs particuliers du fichier texte

Résolu
rimrita Messages postés 22 Statut Membre -  
rimrita Messages postés 22 Statut Membre -
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

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
  2. rimrita Messages postés 22 Statut Membre
     
    cela m'a supprimer les séparateurs du fichier !!
    0
  3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
  4. rimrita Messages postés 22 Statut Membre
     
    celà m'a multiplié les séparateurs
    la premiére * 3
    la deuxiéme *2
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
  7. rimrita Messages postés 22 Statut Membre
     
    Non tous les champs sont attachés et séparés par ":"
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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
    2. rimrita Messages postés 22 Statut Membre
       
      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
    3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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
    4. rimrita Messages postés 22 Statut Membre
       
      mon fichier est issu du linux
      0
    5. rimrita Messages postés 22 Statut Membre
       
      le probléme avec la derniére proposition le size s'affiche
      0
  8. rimrita Messages postés 22 Statut Membre
     
    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
    1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      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
    2. rimrita Messages postés 22 Statut Membre
       
      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
    3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      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
    4. rimrita Messages postés 22 Statut Membre
       
      le probléme c'est que j'ai pas besoin des champs:
      sasl_method=LOGIN
      et
      size=222222
      0
    5. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      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