Substitution de colonne avec condition

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


J'ai un fichier text de 6 colonnes dans lekel je dois faire des substitutions à la colonne 3, sans modifier les espaces inter colonnes.

Un exemple est toujours mieux ;-)

Mon fichier se trouve ici http://illyasso.ifrance.com/testfile.txt

Donc les modifs que je veux faire est de remplacer

63 par 10000
26 par 100000
95 par 50000
57 par 5000

Voici le code que j'utilise

nawk '{ if ( $3 ~ 63 ) {
sub(/'63'/,"10000",$3);print
}
else { if ( $3 ~ 26 ) {
sub(26,"100000",$3);print
}
else { if ( $3 ~ 57 ) {
sub(57,"5000",$3);print
}
else { if ( $3 ~ 95 ) {
sub(95,"50000",$3);print
}
}
}
}
}' testfile.txt > testfile2


Les substitutions sont ok, mais les espaces entre les colonnes ne sont plus maintenus

J'ai aussi tenté ceci avec sed, mais c encor pire en mettant les conditions de substitutions

while read line
do
PROF="`echo $line |nawk '{print $3}'`"
echo $PROF
if [ $PROF -eq "63" ]
then
print $line |sed 's/^\(.\{48\}\).\{2\}\(.*\)/\110000\2/' >> testfile2
fi
done < testfile.txt
A voir également:

6 réponses

dieu
 
ca ser a rien ton script sed il faut faire comme ca si tu veux utiliser sed :


sed 's/10000/\ \{3\}63/;s/100000/\ \{4\}26/; .....etc....etc......; w fichier.resulta ' fichier 
0
papavers Messages postés 24 Date d'inscription   Statut Membre Dernière intervention   1
 
Merci pour ta réponse dieu mais,
En fait mon but est de faire les substitutions seulement au niveau de la troisième colonne de mon fichier de départ sans modifier les espaces entre les colonnes.

Dans ma colonne 3, j'ai soit 63,26,95 ou 57

Donc par exemple à partir de

1000000127 975653733 63 30462190 05/05/2008 11:59:05
1000000128 123355248 63 30462190 05/05/2008 11:57:48
9000000148 115546770 26 30414197 06/05/2008 15:00:43
9000000213 336865764 26 30452424 06/05/2008 16:23:56


je dois avoir après traitement

1000000127 975653733 10000 30462190 05/05/2008 11:59:05
1000000128 123355248 10000 30462190 05/05/2008 11:57:48
9000000148 115546770 100000 30414197 06/05/2008 15:00:43
9000000213 336865764 100000 30452424 06/05/2008 16:23:56

en gardant bien sûr les espaces entre colonne

En utilisant ton code j'ai ce resultat

$sed 's/10000/\ \{3\}63/;s/100000/\ \{4\}26/; ' tetet

{3}6300127 975653733 63 30462190 05/05/2008 11:59:05
{3}6300128 123355248 63 30462190 05/05/2008 11:57:48
9000000148 115546770 26 30414197 06/05/2008 15:00:43
9000000213 336865764 26 30452424 06/05/2008 16:23:56

Dans mon fichier de départ la colonne 3 est située à la position 48 et comporte 2 caractères, d'où la commande sed que j'ai utilisée au début de mon post.
0
papavers Messages postés 24 Date d'inscription   Statut Membre Dernière intervention   1
 
Voici le résulta obtenu avec nawk

http://illyasso.ifrance.com/resultat.txt

à partir de http://illyasso.ifrance.com/testfile.txt

nawk '{ if ( $3 ~ 63 ) {
sub(/'63'/,"10000",$3);print
}
else { if ( $3 ~ 26 ) {
sub(26,"100000",$3);print
}
else { if ( $3 ~ 57 ) {
sub(57,"5000",$3);print
}
else { if ( $3 ~ 95 ) {
sub(95,"50000",$3);print
}
}
}
}
}' testfile.txt > resultat.txt


Les substitutions sont correctes mais les espaces non
0
papavers Messages postés 24 Date d'inscription   Statut Membre Dernière intervention   1
 
Alloooooooooooooooooooooooooooooooo ;-))
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Salut,
sed '
/ 63 / s// 10000 /
/ 26 / s// 100000 /
/ 95 / s// 50000 /
/ 57 / s// 5000 /
' testfile.txt
ou
$ sed '
/ 63 / s//  10000 /
/ 26 / s// 100000 /
/ 95 / s//   50000 /
/ 57 / s//    5000 /
' testfile.txt
;-))
0

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

Posez votre question
papavers Messages postés 24 Date d'inscription   Statut Membre Dernière intervention   1
 
Yes yes yes!!!! je me fais honte!!

Fallait bien sûr considérer les espaces avant la colonne et faire tout juste des substitutions sans "condition"!!!

ça paraît toujours simple quand on nous fournit la réponse :-)

Merci Jipicy!
0
papavers Messages postés 24 Date d'inscription   Statut Membre Dernière intervention   1
 
Au fait voici le code final utilisé


sed '
/ 63 / s//10000 /
/ 26 / s//100000 /
/ 95 / s//50000 /
/ 57 / s//5000 /
' testfile.txt



Tchussssss
0