string - Bash:从字符串中提取(百分比)可变长度数

标签 string bash numbers progress-bar

我想用 bash 脚本写一个小进度条。

要生成进度条,我必须从日志文件中提取进度。

这样一个文件(此处为 run.log)的内容如下所示:

Time to finish 2d 15h, 42.5% completed, time steps left 231856

我现在有兴趣隔离这 42.5%。现在的问题是,这个数字的长度以及数字的位置都是可变的(例如,“完成时间”可能只包含一个数字,如 23 小时或 59 分钟)。

我通过

尝试了这个位置
echo "$(tail -1 run.log | awk '{print $6}'| sed -e 's/[%]//g')"

短“完成时间”以及通过 % 符号失败

echo "$(tail -1 run.log | egrep -o '[0-9][0-9].[0-9]%')"

这里仅适用于 >= 10% 的数字。

是否有更多可变数字提取的解决方案?

============================================= =======

更新:这里是进度条的完整脚本:

#!/bin/bash

# extract % complete from run.log
perc="$(tail -1 run.log | grep -o '[^ ]*%')"

# convert perc to int
pint="${perc/.*}"

# number of # to plot
nums="$(echo "$pint /2" | bc)"

# output
echo -e ""
echo -e "   completed: $perc"
echo -ne "   "
for i in $(seq $nums); do echo -n '#'; done
echo -e ""
echo -e "  |----.----|----.----|----.----|----.----|----.----|"
echo -e "  0%       20%       40%       60%       80%       100%"
echo -e ""
tail -1 run.log
echo -e ""

谢谢你们的帮助,伙计们!

最佳答案

基于你的例子

grep -o '[^ ]*%'

应该给你想要的。

关于string - Bash:从字符串中提取(百分比)可变长度数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14605107/

相关文章:

java - 字符串数组错误

string - 根据规则生成字符串的变体

c++ - 为什么包含 '\0' 和 '\t' 的字符串不能使用 operator == 与 "\0\t"进行比较?

linux - 使用 AWK 打印除第一列之外的所有列

bash - 仅获取列表 x 中不在列表 y 中的那些元素

javascript - 如何检测给定的数字是否是整数?

c - 字符串字谜C程序

python - 有没有一种方法可以安排 docker 容器相互运行?

numbers - 数字1e5的含义是什么?

java - Java中的15.0F在Smali中是0x4170吗?