• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Bash: Umrechnung von hh:mm:ss in Sekunden

migo

Member
Hallöle,

ich würde gerne eine Zeitangabe in der Form "hh:mm:ss" mit bash-Befehlen in Sekunden umrechnen.

Sinn der Sache: Ich nehme TV-Programm mit einem Shell-Skript auf, in welches ich interaktiv (mit kdialog) die Aufnahmedauer im obigen Format eingeben muß, da der mencoder dieses so braucht. Dieser Wert wird in einer Variablen ($dauer) abgelegt. Zur Berechnung der maximalen Datenrate (2 GB-Grenze für avi-Files) brauche ich diese Angabe aber auch noch als Sekunden-Wert. Ich habe bereits ausgiebig gegoogelt, aber nichts dazu gefunden. :cry:
Mir würde auch der umgekehrte Weg helfen, wenn's leichter ist. :wink:

Can you help me?

Thanx, Micha
 

marwe

Newbie
Hi!

awk bietet sich da an:
Code:
echo $dauer | awk -F: '{print $0*3600+$1*60+$2}'

Gruß, marwe
 
A

Anonymous

Gast
Versuch mal das
Code:
#!/bin/bash
#dauer=10:05:35

typeset -i STUNDE
typeset -i MINUTE
typeset -i SEKUNDE

STUNDE=`echo $dauer | cut -f1 -d":"`
MINUTE=`echo $dauer | cut -f2 -d":"`
SEKUNDE=`echo $dauer | cut -f3 -d":"`

MINUTE=$MINUTE*60
STUNDE=$STUNDE*60*60 
SEKUNDE=$SEKUNDE+$MINUTE+$STUNDE

echo $SEKUNDE
robi
 
OP
migo

migo

Member
Danke, Marwe!

Nach vielem rumprobieren auf der Kommandozeile (was so ein falsches Leerzeichen für einen Ärger machen kann...) läuft's jetzt mit awk :D
Meine Zeile lautet nun (Umrechnung in Minuten reicht mir völlig):

Code:
minuten=`echo $dauer | awk 'BEGIN { FS= ":" } { print ( $1 * 60 ) + $2 }'`

Grüße Micha
 

marwe

Newbie
Hi!

Ich bin kein awk-Profi, aber wozu brauchst Du BEGIN?
Code:
minuten=`echo $dauer | awk -F: '{print $1*60+$2}'`
Funktioniert bei mir, aber wie gesagt: kein Profi :D

Gruß, marwe
 
OP
migo

migo

Member
Hi marwe,

bin ebenfalls neu bei awk. Ich habe den Befehl beim googeln gefunden, so ungefähr 30 Sekunden, bevor ich deine Antwort bekam (finde leider die Seite nicht wieder...), es funktioniert. Ich war gestern zu müde, um in der man-page alles abzuchecken und habe solange probiert, bis es passte.
Aber ich versuche es auch mal mit deiner Variante, es muß ja nichts komplizierter gemacht werden, als nötig.

Gruß Micha
 

scg

Hacker
Das BEGIN definiert hier den Field separator, hat den selben Effekt wie das -F auf der Kommandozeile.

In dem Begin-Block werden Sachen abgearbeitet, bevor die Eingabedatei geparst wird, in eurem Fall sollten beide Lösungen gehen.
 
Oben