Unix时间格式转整数值及Bash脚本实现时间字符串转分钟总和的技术咨询
解决方案
没问题,我来帮你搞定这两个需求,先重点解决你卡住的「时间转总分钟数」问题~
一、文本时间转分钟总和(核心需求)
你已经用cat data.txt | cut -f2 -d','提取出了时间字段,其实不用单独cut,直接用awk就能一步完成账户名提取、时间拆分和计算,效率更高。
直接处理整个文件的命令:
awk -F',' '{ # 把时间字符串按h/m/s/空格分割成数组t,t[1]=小时,t[2]=分钟,t[3]=秒 split($2, t, /[hms ]+/) # 计算总分钟数:小时*60 + 分钟(秒数按示例直接舍去,如果要保留小数可以加 t[3]/60) total_min = t[1]*60 + t[2] # 输出账户名和对应的总分钟数 print $1 "分钟总和=" total_min }' data.txt
执行结果:
Account1分钟总和=121 Account2分钟总和=265 Account3分钟总和=343
分步测试(如果想单独验证时间计算):
比如单独拿一个时间字符串测试:
echo "5h 43m 59s" | awk '{split($0, t, /[hms ]+/); print t[1]*60 + t[2]}'
会输出343,和你的示例完全一致。
如果需要把秒数也换算成分钟(比如59秒≈0.98分钟),只需要把计算式改成:
total_min = t[1]*60 + t[2] + t[3]/60
二、Unix时间格式转整数值
Unix时间本质就是整数时间戳(比如1690000000),如果是字符串形式的Unix时间,直接转整数很简单:
- 如果是纯整数字符串,直接用bash变量转换:
unix_ts_str="1690000000" echo $((unix_ts_str)) # 输出整数1690000000 - 如果是带小数的Unix时间(比如
1690000000.123),要转成整数(舍去小数):echo "1690000000.123" | awk '{print int($0)}' # 或者用printf取整 printf "%.0f" 1690000000.123
内容的提问来源于stack exchange,提问作者Boris
相关产品推荐
相关产品推荐

