搜索输出时间并对其进行汇总

时间:2017-05-28 16:21:13

标签: regex bash grep

最终目标是设置一个包含动态统计信息的网站。 为此,我已经创建了一个mysql数据库,并计算我们的Minecraft服务器上已知玩家的总数。 下一步是完全显示所有玩家的游戏时间。

我有一个“activetime.conf”,其中列出了所有玩家的游戏时间。

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"
    }
}

我已经拥有的内容:

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

我们有以下字符串“hours_played”,并希望搜索时间信息+总结时间,以便最终显示整个小时。

hours_played:

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

最终结果应为:

2

为什么结果为2?

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

1 个答案:

答案 0 :(得分:2)

您可以做的一件事是使用函数来解析时间信息(小时,分钟,秒):

#!/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"
}

因此,您只需拨打:{/ p>,而不是回显最后一行echo $hours_played

active_time

调用该函数会累计小时和分钟,例如:

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

输出:

15 total hours

*如果需要,可以省略总和秒数并添加总数作为OP添加的练习。