编辑:是的。我为 OP 在评论后开发并在 Mac OS X、CentOS 和 Ubuntu 上进行了检查。一个衬里,POSIX 兼容命令,用于将“X 分钟 Y 秒”格式转换为秒。 这就是问题。
echo $(($(echo "5 minutes 10 seconds" | cut -c1-2)*60 + $(echo "5 minutes 10 seconds" | cut -c1-12 | awk '{print substr($0,11)}')))
OP 通过评论告诉我,他想要“X 分钟 Y 秒”格式而不是 HH:MM:SS 格式。带有date 和"+%s" 的命令在(我的)Mac 上抛出错误。 OP 想从“X 分钟 Y 秒”格式中获取数值并将其转换为秒。首先,我提取了数字中的分钟(将其作为方程式 A):
echo "5 minutes 10 seconds" | cut -c1-2)
然后我提取了秒部分(将其作为方程式 B):
echo "5 minutes 10 seconds" | cut -c1-12 | awk '{print substr($0,11)}'
现在将分钟乘以 60,然后与另一个相加:
echo $((equation A)*60) + (equation B))
OP 应该要求其他人检查我的命令的开发版本(但可以工作),然后再将其用于自动重复使用,就像我们在生产服务器上使用 cron 所做的那样。
如果我们想在“X 分钟 Y 秒”格式的值的日志文件上运行它,我们必须将 echo "5 minutes 10 seconds" 更改为 cat file | ... 类似命令。 I kept a gist of it too 如果我或其他人需要,我们可以将它与cat 一起使用,以在x minutes y seconds 类似日志格式的服务器日志文件上运行。
虽然题外话(据我了解,问题与当前时间没有太大关系),但这不适用于符合 POSIX 的操作系统以秒为单位获取当前时间:
date -d "1970-01-01 00:00:00 UTC 5 minutes 10 seconds" "+%s"
它会在 MacOS X 上抛出错误,但可以在大多数 GNU/Linux 发行版上运行。 +%s 部分将在复杂使用时在符合 POSIX 的操作系统上抛出错误。这些命令最适合在 POSIX 上以秒为单位获取当前时间,以兼容任何类型的 unix,例如 OS:
awk 'BEGIN{srand(); print srand()}'
perl -le 'print time'
如果 OP 需要,可以通过以秒为单位生成当前时间并减去来扩展它。我希望它会有所帮助。
---- 编辑前的旧答案----
如果没有 date -- echo | awk '{print systime();}' 或 wget -qO- http://www.timeapi.org/utc/now?\\s,您可以获得当前时间。将时间转换为秒的其他方法是echo "00:20:40.25" | awk -F: '{ print ($1 * 3600) + ($2 * 60) + $3 }'。
另一个答案中显示的printf 示例接近完美。
GNU/Linux 的基本实用程序总是需要你想要的东西 - gnu.org/../../../../../Setting-an-Alarm.html
接近的方式真的取决于你需要多少万无一失的方式。