2017-05-28 2 views
1

Das letzte Ziel ist es, eine Website mit dynamischen Statistiken einzurichten. Dafür habe ich bereits eine mysql-Datenbank erstellt und zähle die Gesamtanzahl der bekannten Spieler auf unserem minecraft-Server. Im nächsten Schritt wird die Spielzeit aller Spieler angezeigt.Ausgabe für Zeit suchen und zusammenfassen

Ich habe eine "activetime.conf", wo die Spielzeit für alle Spieler aufgeführt ist.

activetime.conf:

config { 
    auto-save=300 
    default-range=5 
    max-range=10 
} 
players { 
    "111-111-1111-11-11" { 
     name=playerjack 
     time="2h13m25s" 
    } 
    222-2-22222-2-222 { 
     name=playergert 
     time="14m13s" 
    } 
} 

Was ich schon:

players=$(ls -l /path | grep -v ^d | grep -v ^t | wc -l) 
mysql -u root -pmypass mydatabase -e "UPDATE mytable SET players = '$players';" 
hours_played=$(grep -E '"*h*m*s"' /path/activetime.conf) 
echo $hours_played 

Wir haben die folgende Zeichenfolge "hours_played" und wie es für Zeitinformationen suchen + zusammenzufassen die mal um endlich die vollen Stunden zu zeigen.

hours_played:

time="2h13m25s" time="14m13s" 

Endergebnis sein sollte:

2 

Warum das Ergebnis 2?

2h13m25s + 14m13s = 2h27m38s (=2h) 
+3

Bitte zeigen Sie Ihre Programmieranstrengungen. – Cyrus

+0

Können Sie einige weitere Beispiele teilen? –

+0

Ich habe meine Frage bearbeitet, um zu zeigen, was das Ziel ist und was ich habe. – realKSMC

Antwort

2

Eine Sache, die Sie tun können, ist eine Funktion zu verwenden, um die Zeit info (Stunden, Minuten, Sekunden) zu analysieren:

#!/bin/bash 

active_time() { 

    regex='time.*\"(.+)h(.+)m(.+)s\"' 

    while read -r str; do 
    if [[ $str =~ $regex ]] ; then 
     h=$((h + BASH_REMATCH[1])) 
     m=$((m + BASH_REMATCH[2])) 
     s=$((s + BASH_REMATCH[3])) 
    fi 
    sub=$((m/60 )) 
    tot=$((h + sub)) 
    done<"/path/active_time.conf" 
    echo "${tot} total hours" 
} 

Anstatt also Echo der letzten letzten Zeile echo $hours_played Sie gerade nennen würde :

active_time 

Aufruf der Funktion, um die Stunden und Minuten beträgt, also zum Beispiel:

time="8h13m25s" 
time="6h54m13s" 

ausgeben würde:

15 total hours 

* die Sekunden Summieren und zur Ergänzung der Gesamt wurde als eine Übung für den OP weggelassen hinzuzufügen, falls gewünscht.

+0

U hat es geschafft! Thx viel :) Ich werde versuchen, die Sekunden zu addieren, wenn die Zeit dafür kommt. – realKSMC

+0

Eine Sache zu beachten, wenn Sie möglicherweise "0h" für Zeiten, die nur Minuten/Sekunden sind, wird es viel besser arbeiten. Zum Beispiel (0h25m35s) ... sonst werden die Minuten und Sekunden ignoriert, bis sie einen Stundenwert anzeigen. –

Verwandte Themen