Conversion durées -> secondes sur un fichier avec sed - Shell/Batch - Programmation
Marsh Posté le 04-05-2007 à 11:36:21
Personne ne sait ? Je craque completement... si je remplace FORMAT par '.*' la chaine envoyé par sed est reconnue par la fonction, mais dès que je complique FORMAT en mettant par exemple '[0-9].*' ça ne marche pas...
Marsh Posté le 04-05-2007 à 11:59:33
Genre voilà un exemple complet à mettre dans un fichier script.sh :
|
et voilà le résultat de son appel :
|
Vous y comprenez quelque chose ?!
Marsh Posté le 04-05-2007 à 13:01:30
Dans ta ligne sed, la partie entre backquotes est appelé par le shell avant que la ligne soit passée en argument à sed. Donc le shell appelle la fonction TimeInSeconds avec pour argument un charactère "&". La fonction écrit "23:54.03 n'a pas pu etre converti" puisque "&" n'est pas une date valide, et finalement le shell appelle sed "s/[0-9:.]*/23:54.03 n'a pas pu etre converti/g" test
Marsh Posté le 04-05-2007 à 15:02:35
Ok, mais pourquoi la fonction écrit "23:54.03 n'a pas pu etre converti" ? Le $1 est censé valoir & et non pas 23:54.03 non ?
Autre bizarrerie, en ajoutant ces deux lignes au tout début de la fonction :
echo -n "$1"
echo -n "$1" > output
la première ligne va faire afficher 23:54.03 sur la sortie standard, alors que la deuxième va écrire & dans le fichier output...
En tout cas merci pour ton explication.
Marsh Posté le 04-05-2007 à 16:09:56
En fait oui, je me suis planté sur ce point. En fait la fonction écrit écrit "& n'a pas pu etre converti", et ensuite c'est sed qui remplace les "&" par ce qui a maché, c'est-à-dire "23:54.03".
Marsh Posté le 04-05-2007 à 18:35:09
D'accord ! Ca me parait clair maintenant mais bon sang, c'est tout de meme assez tordu. Merci beaucoup, j'ai appris un bon truc grace a toi
PS : j'ai viré cette merde et remplacer par du awk, c'est beaucoup mieux !
Marsh Posté le 03-05-2007 à 15:26:16
Bonjour,
j'ai un fichier contenant des durées exprimées sous le format 00:00:00.00 et j'aimerai bien convertir ça en nombre de secondes... J'ai fait la fonction suivante :
qui marche bien lorsque je l'appelle en passant le paramètre à la main, par exemple comme ça :
TimeInSeconds 43:22.03
ce qui renvoie 2602.03. Mais quand j'essaie de l'appliquer à mon fichier à l'aide de sed, ça foire et c'est le "else" qui est éxécuté. Par exemple :
cat $FILE | sed "s/[0-9:.]*/`TimeInSeconds \&`/g"
va me récrire le contenu du fichier à l'identique... Ca fait plusieurs heures que je suis la dessus et je vais péter les plombs !!!! Merci pour votre aide.
Message édité par souliane le 04-05-2007 à 11:42:29