Bash 如何以秒为单位转换w命令空闲超时?

Bash 如何以秒为单位转换w命令空闲超时?,bash,shell,Bash,Shell,我试图使用下面的命令来找出用户的空闲时间,但空闲时间是以秒、小时或天等所有格式显示的。我怎样才能改变它,使其始终以秒为单位显示 w | tr -s " " | cut -d" " -f1,5 | tail -n+3 结果 testuser 10days ec2-user 3.00s 有没有一种方法可以以秒为单位显示10天? 我看到一个带有答案的链接,但它使用了我不想使用的新纪元时间。这里是一个bash解决方案: WishSeconds(){ #参数1:“w”命令空闲时间44.00s、5:10

我试图使用下面的命令来找出用户的空闲时间,但空闲时间是以秒、小时或天等所有格式显示的。我怎样才能改变它,使其始终以秒为单位显示

w | tr -s " " | cut -d" " -f1,5 | tail -n+3
结果

testuser 10days
ec2-user 3.00s
有没有一种方法可以以秒为单位显示10天?
我看到一个带有答案的链接,但它使用了我不想使用的新纪元时间。

这里是一个bash解决方案:

WishSeconds(){
#参数1:“w”命令空闲时间44.00s、5:10、1:28m、3天等。
#2:变量名(不使用$)以秒为单位接收idel时间
#注意:当用户在终端中键入内容时,空闲时间重置为零。
#调用命令的循环作业不会重置空闲时间。
本地愿望单元1单元2
Wish=“$1”
声明-n秒=2美元
#在bash中,前导0被视为八进制值。将“:09”更改为“:9”
Wish=“${Wish/:0/:}”
如果[[“$Wish”==*“天”*];则
Unit1=“${Wish%%days*}”
秒=$((单位1*86400))
elif[“$Wish”==*“m”*];然后
Unit1=“${Wish%%m*}”
Unit2=“${Unit1##*:}”
Unit1=“${Unit1%%:*}”
秒=$((单位1*3600)+(单位2*60)))
elif[“$Wish”==*“s”*];然后
秒数=“${Wish%%.*}”
其他的
Unit1=“${Wish%%:*}”
Unit2=“${Wish##*:}”
秒=$((单位1*60)+单位2))
fi
}#几秒钟
希望秒“20天”天;回音通过20天:$天
希望秒“1:10米”小时;回声通过1:10米:小时
愿望秒“1:30”分钟;回声经过1:30:$min
愿望秒“44.20秒”;回声通过44.20秒:秒
结果
通过20天:1728000
通过1:10米:4200
过了1:30:90
通过44.20秒:44
注 而不是使用:

w|tr-s|cut-d|f1,5|tail-n+3
你可以切掉尾巴,然后使用:

w-h | tr-s”“| cut-d”“-f1,5
这将为您删除标题。我也这样做,并且使用短格式(sans CPU stats)和IP地址而不是主机名,因此我使用:

w-ish | tr-s”“| cut-d”“-f1,5

使用
manw
获取更多参数详细信息。

如果时间以
结束,将数字乘以
86400
。如果是
2:32m
,则在
处拆分,将第一个数字乘以
60
,然后添加第二个数字。如果它像
21:34
,那么它就是
21*3600+34*60
。大纪元的美妙之处在于,转换成任何其他形式都很简单。即使你不想把它作为你的输出,它也非常适合用作中间形式。你链接到的问题在第一个答案中有这样一个问题:如果你想要年龄而不是绝对时间,对它进行后处理,从当前时间中减去它,然后展示如何做。第二个答案展示了如何做所有的拆分和乘法,虽然数天的乘数是错误的。