Extraction / traitement champ 1 avec awk (ou autre)
Résolu
snow_frog
Messages postés
216
Date d'inscription
Statut
Membre
Dernière intervention
-
snow_frog Messages postés 216 Date d'inscription Statut Membre Dernière intervention -
snow_frog Messages postés 216 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:
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:
j'arrive à extraire ma première information de la sorte:
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 :/
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 :/
A voir également:
- Extraction / traitement champ 1 avec awk (ou autre)
- Reconsidérer le traitement de vos informations à des fins publicitaires - Accueil - Réseaux sociaux
- Traitement de texte gratuit - Guide
- Ce traitement de texte gratuit et léger est parfait pour remplacer Word, même sur un vieux PC - Guide
- Traitement de texte gratuit open office - Télécharger - Suite bureautique
- Extension d'un fichier qui s'ouvre avec un traitement de texte - Guide
6 réponses
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
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
merci je vais regarder cette magnifique ligne sed !!
la syntaxte de sed m'étonnera toujours
la syntaxte de sed m'étonnera toujours
Pour t'aider à comprendre plus facilement cette syntaxe :
Les sous-expressions et références arrières
Les sous-expressions et références arrières
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:
donne un resultat different d'un fichier comme ça:
j'ai commencé à essayer de décortiquer ta commande, mais le premier gros paragraphe me pose encore des soucis
je suppose qu'il y a 4 blocs
le second
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut,
Une version sed plus édulcorée :
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
Effectivement, c'est beaucoup moins alambiqué ;-)