Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
842 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  tronquer une string avec sed ou gawk

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

tronquer une string avec sed ou gawk

n°1130585
damcmoi
Posté le 25-06-2005 à 09:23:48  profilanswer
 

Salut, j'ai une string "chronomètre" splitée en 3 strings (minutes, secondes millisecondes) et j'aimerai tronquer les secondes et millisecondes de la manière suivante :
exemples pour les secondes :  
'26' -> rien à faire
'60' -> rien à faire
'08' -> '8'
'00' -> '0'
exemples pour les millisecondes :
'860' -> rien à faire
'800' -> rien à faire
'075' -> '75'
'006' -> '6'
'000' -> '0'
 
Pour le moment le meilleur truc que j'ai trouvé c'est :  
echo "275" | sed s/^0*//" -> '275'
echo "075" | sed s/^0*//" -> '75'
echo "005" | sed s/^0*//" -> '5'
 
Le pb c'est si j'ai '000' ben ça me retourne une chaine vide. Faudrait que je puisse en tronquer au plus 2.  :??:  
Et puis je suis obligé de distinguer les secondes et millisecondes. Donc 2 fonctions de tronquage sed différentes.  
A moins que je puisse faire une fonction gawk du type :
gawk '{
Si longueur(string)==2 alors je tronque un éventuel premier 0;
Si longueur(string)==3 alors je tronque au plus les deux premiers 0;
}'
Mais je connais pas la syntaxe de cette fonction de folie lol.
Merci à vous si vous êtes inspirés.
 
 
 
 

mood
Publicité
Posté le 25-06-2005 à 09:23:48  profilanswer
 

n°1130654
Deadlock
Feck off, cup !
Posté le 25-06-2005 à 12:13:02  profilanswer
 

Donne l'input exacte et l'output souhaitée ca sera plus simple pour se comprendre :)


---------------
Institutions européennes: Ensemble d'outils dont le but est de transformer une grande quantité d'argent en merde. Cette merde est utilisée pour créer de nouveaux fonctionnaires. L'argent restant payant des externes pour faire leur travail.
n°1130704
damcmoi
Posté le 25-06-2005 à 14:16:30  profilanswer
 

Ben je vois pas comment expliquer mieux ...  :??: Alors je reprends :
j'ai trois variables qui sont min ,sec et milli d'un temps type chronomètre : x'xx''xxx
objectif, si parmi les variables secondes ou millisecondes j'ai des 0 au début, je veux les enlever.
Donc concrètement :  
pour le temps 1'08''009 je splite en min=1 sec=08 et milli=009. Moi je veux la moulinette qui va me faire passer à sec=8 et milli=9.
Mais cette moulinette ne devra rien faire si sec=57 ou si milli=230.
Par contre si sec=00 ou milli=000, je veux en retour sec=0 et milli=0.
 
Donc moi ce que je veux faire (et je sais pas si c'est la meilleure solution)
read min sec mill "1'56''023"
sec=moulinette(sec);
milli=moulinette(milli);
 
avec la moulinette qui est qqchoz du genre:
echo $variable | gawk '{if length($0)==2 (donc sec)
                            retirer au plus le premier 0 à $variable
                        else (donc milli)
                            retirer au plus les deux premiers 0 à $variable}'
 
Merci pour ton aide :)
 
 
 
 

n°1130716
damcmoi
Posté le 25-06-2005 à 14:33:52  profilanswer
 

J'ai trouvé une solution hyper laborieuse avec sed:
Moulinette:
echo $variable | sed "s/^000$/a/"
               | sed "s/^00$/a/"
               | sed "s/^0*//"
               | sed "s/a/0/"
Si jamais vous avez plus propre avec gawk, je préfèrerais :)
Merci.
 

n°1130811
Deadlock
Feck off, cup !
Posté le 25-06-2005 à 16:08:10  profilanswer
 

Tu peux aussi simplement convertir ta string en integer ... ça marche à tous les coups ;)

ROOT:belokan# echo 001 | awk '{ print int($1) }'
1
ROOT:belokan# echo 012 | awk '{ print int($1) }'
12
ROOT:belokan# echo 000 | awk '{ print int($1) }'
0


Message édité par Deadlock le 25-06-2005 à 23:19:49

---------------
Institutions européennes: Ensemble d'outils dont le but est de transformer une grande quantité d'argent en merde. Cette merde est utilisée pour créer de nouveaux fonctionnaires. L'argent restant payant des externes pour faire leur travail.
n°1130813
damcmoi
Posté le 25-06-2005 à 16:13:21  profilanswer
 

la grande classe :) :)
Merci infiniment
Mais que dois-je faire pour que ça marche comme ça:
var= ${echo $var | awk '{ print int($1)}'}
??

n°1130822
Deadlock
Feck off, cup !
Posté le 25-06-2005 à 16:25:33  profilanswer
 

Si tu veux vraiment jouer avec les length et tester si chaque position de gauche à droite est égale ou non à "0" tu peux le faire comme ça:
 

echo $var | awk 'int($1) != 0 { for ( i = 1; i <= length($1); i++ ) if ( substr($1, i, 1) != "0" ) {  print substr($1, i) ; exit } } { print "0" }'


 
Pour ta variable, fais le comme ça:
 

var=`echo $var | awk '{ print int($1) }'`


 
Les back-quotes `` permettent d'executer la commande se trouvant entre elles pour "seter" une variable.


---------------
Institutions européennes: Ensemble d'outils dont le but est de transformer une grande quantité d'argent en merde. Cette merde est utilisée pour créer de nouveaux fonctionnaires. L'argent restant payant des externes pour faire leur travail.
n°1130835
damcmoi
Posté le 25-06-2005 à 16:34:07  profilanswer
 

ça marche pas avec les back-quotes :(
 
numero=06
numero = `echo $numero | gawk '{ print int($1) }'`
echo $numero
 
->numero: command not found
06
 
 
 
Je suis sous cygwin/bash/xp...

n°1130838
Deadlock
Feck off, cup !
Posté le 25-06-2005 à 16:35:11  profilanswer
 

enlève les espaces avant et après =


---------------
Institutions européennes: Ensemble d'outils dont le but est de transformer une grande quantité d'argent en merde. Cette merde est utilisée pour créer de nouveaux fonctionnaires. L'argent restant payant des externes pour faire leur travail.
n°1130840
damcmoi
Posté le 25-06-2005 à 16:36:12  profilanswer
 

Merci bocou bocou bocou :)

mood
Publicité
Posté le 25-06-2005 à 16:36:12  profilanswer
 

n°1130856
Deadlock
Feck off, cup !
Posté le 25-06-2005 à 17:14:22  profilanswer
 

De rien ;)


---------------
Institutions européennes: Ensemble d'outils dont le but est de transformer une grande quantité d'argent en merde. Cette merde est utilisée pour créer de nouveaux fonctionnaires. L'argent restant payant des externes pour faire leur travail.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  tronquer une string avec sed ou gawk

 

Sujets relatifs
Conversion System::String* en std::stringcomparer pour savoir si une String est différent d'une chaine
[C++]Existe t-il une fonction récupérant une partie d'un string?y'a t il une fonction C qui remplace la fonction c++ string.replace?
Variable globale !!Retirer le debut et la fin d'un string
Conversion "string" vers "char*" et inversecompatibilité entre frpintf et string ?
Chaine String [RESOLU]Installation Bioperl: IO::String
Plus de sujets relatifs à : tronquer une string avec sed ou gawk


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR