Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

Bash: Umrechnung von hh:mm:ss in Sekunden

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Antworten
Benutzeravatar
migo
Member
Member
Beiträge: 66
Registriert: 25. Aug 2004, 21:10
Wohnort: Hamburg

Bash: Umrechnung von hh:mm:ss in Sekunden

Beitrag von migo »

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
Benutzeravatar
marwe
Newbie
Newbie
Beiträge: 10
Registriert: 5. Sep 2004, 20:41

Beitrag von marwe »

Hi!

awk bietet sich da an:

Code: Alles auswählen

echo $dauer | awk -F: '{print $0*3600+$1*60+$2}'
Gruß, marwe
Benutzeravatar
robi
Moderator
Moderator
Beiträge: 3174
Registriert: 25. Aug 2004, 02:13

Beitrag von robi »

Versuch mal das

Code: Alles auswählen

#!/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
Benutzeravatar
migo
Member
Member
Beiträge: 66
Registriert: 25. Aug 2004, 21:10
Wohnort: Hamburg

Beitrag von migo »

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: Alles auswählen

minuten=`echo $dauer | awk 'BEGIN { FS= ":" } { print ( $1 * 60 ) + $2 }'`
Grüße Micha
Benutzeravatar
marwe
Newbie
Newbie
Beiträge: 10
Registriert: 5. Sep 2004, 20:41

Beitrag von marwe »

Hi!

Ich bin kein awk-Profi, aber wozu brauchst Du BEGIN?

Code: Alles auswählen

minuten=`echo $dauer | awk -F: '{print $1*60+$2}'`
Funktioniert bei mir, aber wie gesagt: kein Profi :D

Gruß, marwe
Benutzeravatar
migo
Member
Member
Beiträge: 66
Registriert: 25. Aug 2004, 21:10
Wohnort: Hamburg

Beitrag von migo »

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
Benutzeravatar
scg
Hacker
Hacker
Beiträge: 399
Registriert: 4. Jul 2004, 09:56
Wohnort: Nürnberg (SuSE-City)
Kontaktdaten:

Beitrag von scg »

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.
CU scg
Benutzeravatar
marwe
Newbie
Newbie
Beiträge: 10
Registriert: 5. Sep 2004, 20:41

Beitrag von marwe »

Hi!

Hey, danke für die Erklärung :D

Gruß, marwe
Benutzeravatar
migo
Member
Member
Beiträge: 66
Registriert: 25. Aug 2004, 21:10
Wohnort: Hamburg

Beitrag von migo »

Auch danke!

Micha
Antworten