Extraction / traitement champ 1 avec awk (ou autre)

Résolu
snow_frog Messages postés 214 Date d'inscription   Statut Membre Dernière intervention   -  
snow_frog Messages postés 214 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Actuellement je récupère dans un fichier txt une liste de fichier avec des valeurs associées sur 4/5 colonnes:

 #> cat data_extrat.txt
PLANTE1_TERRASSE_205_1o1-j00-s07.txt ;-1.8 ;3.24 ;0.13
PLANTE1_TERRASSE_205_1o1-j02-s07.txt ;-3.2 ;0.56 ;0.11
PLANTE1_TERRASSE_205_1o1-j02_temp.txt ;15.8 ;22.1 ;20.1 ;0.8
PLANTE1_TERRASSE_205_1o1-j02_g20-s07.txt ;5.4 ;0.56 ;0.11
PLANTE1_TERRASSE_205_1o1-j02_g20_temp.txt ;18.2 ;21.3 ;20.1 ;0.7


Je voudrais pouvoir le remanier légèrement afin de pouvoir mettre en colonne x (en premièr ou peu importe d'ailleurs)
Le jour et le paramètre.
Le jour = j00 / j02 ..
Le paramètre = _temp / g20 / g20_temp ...

Pour avoir quelques chose au final comme ça:

 #> cat data_extrat.txt
j00; PLANTE1_TERRASSE_205_1o1-j00-s07.txt;-1.8 ;3.24 ;0.13
j02; PLANTE1_TERRASSE_205_1o1-j02-s07.txt -3.2 ;0.56 ;0.11
j02_temp; PLANTE1_TERRASSE_205_1o1-j02_temp.txt;15.8;22.1;20.1;0.8
j02_g20; PLANTE1_TERRASSE_205_1o1-j02_g20-s07.txt;5.4;0.56;0.11
j02_g20_temp; PLANTE1_TERRASSE_205_1o1-j02_g20_temp.txt;18.2;21.3;20.1;0.7


j'arrive à extraire ma première information de la sorte:

 #> cat extract_test.sh
#!/bin/bash

for i in `cat data_extract.txt`
do
basename $i | sed s/.txt// | cut -d "j" -f2 | cut -d "-" -f1 | awk -F ";" '{print $1}' | sed 's/^0//' >> trial.txt
done


#> cat trial.txt
0
2
2_temp
2_g20
2_g20_temp


Après il faudrait que j'ajoute les autres colonnes à la suite… j'ai essayé de rajouter un pipe à la suite de ma commande pour mettre un awk -F ";" '{print ";"$2";"$3}' avant la redirection vers le fichier de sortie mais ça n'a pas l'air de fonctionner (en sortie j'ai que des ";;"

Donc mon interrogation: est-ce que déjà je prend mon problème dans le bon sens ?
Au final ce que je veux, c'est je part d'un tableau sur lequel j'extrais une données se trouvant dans une chaine de caractère contenu dans la première colonne.

merci à ceux qui sont arriver au bout de mon pavé....
et je peux essayer de reformuler si ce n'est pas clair :/

6 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    $ awk -F "[.-]" '{print $2 ";  " $0}' fichier
    j00; PLANTE1_TERRASSE_205_1o1-j00-s07.txt ;-1.8 ;3.24 ;0.13
    j02; PLANTE1_TERRASSE_205_1o1-j02-s07.txt ;-3.2 ;0.56 ;0.11
    j02_temp; PLANTE1_TERRASSE_205_1o1-j02_temp.txt ;15.8 ;22.1 ;20.1 ;0.8
    j02_g20; PLANTE1_TERRASSE_205_1o1-j02_g20-s07.txt ;5.4 ;0.56 ;0.11
    j02_g20_temp; PLANTE1_TERRASSE_205_1o1-j02_g20_temp.txt ;18.2 ;21.3 ;20.1 ;0.7
    1
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Salut,

      Effectivement, c'est beaucoup moins alambiqué ;-)
      0
  2. UnGars
     
    Salut,

    $ cat plop 
    PLANTE1_TERRASSE_205_1o1-j00-s07.txt ;-1.8 ;3.24 ;0.13
    PLANTE1_TERRASSE_205_1o1-j02-s07.txt ;-3.2 ;0.56 ;0.11
    PLANTE1_TERRASSE_205_1o1-j02_temp.txt ;15.8 ;22.1 ;20.1 ;0.8
    PLANTE1_TERRASSE_205_1o1-j02_g20-s07.txt ;5.4 ;0.56 ;0.11
    PLANTE1_TERRASSE_205_1o1-j02_g20_temp.txt ;18.2 ;21.3 ;20.1 ;0.7


    $ sed 's/^\([^-]*-\)\([^-.]*\)\([-.][^ ]*\)  *\(.*\)/\2;  \1\2\3\4/' plop 
    j00; PLANTE1_TERRASSE_205_1o1-j00-s07.txt;-1.8 ;3.24 ;0.13
    j02; PLANTE1_TERRASSE_205_1o1-j02-s07.txt;-3.2 ;0.56 ;0.11
    j02_temp; PLANTE1_TERRASSE_205_1o1-j02_temp.txt;15.8 ;22.1 ;20.1 ;0.8
    j02_g20; PLANTE1_TERRASSE_205_1o1-j02_g20-s07.txt;5.4 ;0.56 ;0.11
    j02_g20_temp; PLANTE1_TERRASSE_205_1o1-j02_g20_temp.txt;18.2 ;21.3 ;20.1 ;0.7
    0
  3. snow_frog Messages postés 214 Date d'inscription   Statut Membre Dernière intervention   139
     
    merci je vais regarder cette magnifique ligne sed !!

    la syntaxte de sed m'étonnera toujours
    0
    1. snow_frog Messages postés 214 Date d'inscription   Statut Membre Dernière intervention   139
       
      merci pour le lien
      0
  4. snow_frog Messages postés 214 Date d'inscription   Statut Membre Dernière intervention   139
     
    en recopiant ton fichier plop de windows ça foncitonne,
    en repartant de mon fichier d'origine, qui n'a pas les espaces avant les ; ça ne fonctionne plus.... je me dit tu as utilisé l'esapce en tans que delimiteur de champs, et je vois dans ton lien que un esapce en sed "s'ecrit" /s mais je n'en voit pas dans ta commande....

    donc qu'est ce qui fait qu'un fichier configurer comme ça:
    PLANTE1_TERRASSE_205_1o1-j00-s07.txt  ;-1.8 ;3.24 ;0.13

    donne un resultat different d'un fichier comme ça:
    PLANTE1_TERRASSE_205_1o1-j00-s07.txt;-1.8;3.24;0.13


    j'ai commencé à essayer de décortiquer ta commande, mais le premier gros paragraphe me pose encore des soucis

     sed 's/^\([^-]*-\)\([^-.]*\)\([-.][^;]*\)

    je suppose qu'il y a 4 blocs
      sed 's/^\

     ([^-]*-\)

     ([^-.]*\)

    \([-.][^;]*\)

    le second
    *\(.*\)/\2;  \1\2\3\4/' 
    me laisse à penser que c'est pour la ré-écriture des champs du tableau.
    0
    1. UnGars
       
      La commande (sans espace) :

       sed 's/^\([^-]*-\)\([^-.]*\)\([-.][^;]*\)\(.*\)/\2;  \1\2\3\4/'


      En fait il y a 4 sous-ensembles :

      \([^-]*-\)
      = PLANTE1_TERRASSE_205_1o1-

      \([^-.]*\)
      = -j00 ou j02_temp ou j02_g20

      \([-.][^;]*\)
      = -s07.txt ou .txt

      \(.*\)
      = ;-1.8 ;3.24 ;0.13

      Le
      ^
      indique le début de la ligne.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    Une version sed plus édulcorée :

    $ sed 'h;s/^[^-]*-\([^-.]*\).*/\1; /;G;s/\n//' plop
    j00; PLANTE1_TERRASSE_205_1o1-j00-s07.txt;-1.8 ;3.24 ;0.13
    j02; PLANTE1_TERRASSE_205_1o1-j02-s07.txt;-3.2 ;0.56 ;0.11
    j02_temp; PLANTE1_TERRASSE_205_1o1-j02_temp.txt;15.8 ;22.1 ;20.1 ;0.8
    j02_g20; PLANTE1_TERRASSE_205_1o1-j02_g20-s07.txt;5.4 ;0.56 ;0.11
    j02_g20_temp; PLANTE1_TERRASSE_205_1o1-j02_g20_temp.txt;18.2 ;21.3 ;20.1 ;0.7

    0
  7. snow_frog Messages postés 214 Date d'inscription   Statut Membre Dernière intervention   139
     
    merci à vous 3 pour les 3 réponse différentes!

    j'avoue avoir une petite préférence pour celle de dubcek... vous m'en voudrez pas :/
    0