从字符串中删除字符时如何修复 bash 错误?

从字符串中删除字符时如何修复 bash 错误?

这不是家庭作业。我是 bash 新手,并试图从我们的日志记录中收集一些数据。

我正在从文件中读取行。所有的行看起来都是这样的:

[info] 1 - 12-04 15:33:37.542 : Finished createWalletRandom, total time 9898ms

我需要解析出毫秒(我将得到最小值、最大值、平均值)。我可以得到9898ms,但我需要摆脱它ms才能使数学发挥作用。

尝试下面的这一行,不会改变任何东西:

MILLI_SECONDS=${RAW_MILLI_SECONDS%??}

尝试下面的操作会产生错误get_wallet_times.sh: line 23: -2: substring expression < 0

MILLI_SECONDS=${RAW_MILLI_SECONDS::-2}

这是我的代码:

while read ONE_LINE;
do
    echo $ONE_LINE
    RAW_MILLI_SECONDS="$(cut -d' ' -f13 <<<"$ONE_LINE")"
    echo $RAW_MILLI_SECONDS
    MILLI_SECONDS=${RAW_MILLI_SECONDS::-2}
    MILLI_SECONDS=${RAW_MILLI_SECONDS%??}
    echo ${MILLI_SECONDS}
    LINE_COUNT=$((LINE_COUNT+1))
    FILE_SUM=$((FILE_SUM+MILLI_SECONDS))
done < logfile.txt

这是在 macOS 上,以防它是 mac 特有的 bash 问题。如果您还有其他需要,请告诉我。

谢谢马特

答案1

我不确定 的 MacOS 实现是否存在差异bash,但您可以尝试基于 RegExp 的字符串修改,如下所示

MILLI_SECONDS=${RAW_MILLI_SECONDS/ms/}

ms它将用空字符串替换模式。

答案2

您可以使用它awk来解析整个文件

awk '
    /ms$/ { ms += $NF }
    END { printf "Total %ld ms from %d record(s)\n", ms, NR }
' <logfile.txt

第一行匹配ms一行的最后两个字符,并对相应字段的数值求和。该END行报告总数。

相关内容