gpt4 book ai didi

linux - 使用 bash 脚本将文本转换为时间格式

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:50:19 27 4
gpt4 key购买 nike

我是 shell 脚本的新手。我有一个制表符分隔的文件,例如,

0018803 01  1710    2050    002571      
0018951 01 1934 2525 003277
0019362 02 2404 2415 002829
0019392 01 2621 2820 001924
0019542 01 2208 2413 003434
0019583 01 1815 2134 002971

这里,第 3 和第 4 列代表开始时间和结束时间。

我想在适当的 timeFrame 中转换这两列,以便我可以获得第 6 列作为列 4 和列 3 之间的确切时间差(以小时和分钟为单位)。

6 列的结果将为 3:405:5100:111:592:05

最佳答案

awk 的一种方式:

$ cat test.awk
# create a function to split hour and minute
function f(h, x) {
h[0] = substr(x,1,2)+0
h[1] = substr(x,3,2)+0
}

{
f(start, $3);
f(end, $4);
span = end[1] - start[1] > 0 \
? sprintf("%d:%02d", end[0]-start[0], end[1]-start[1]) \
: sprintf("%d:%02d", end[0]-start[0]-1, 60+end[1]-start[1]);
print $0 OFS span
}

然后按如下方式运行 awk 文件:

$ awk -f test.awk input_file

编辑:根据@glenn jackman的建议,可以简化代码(引用@Kamil Cuk的方法):

function g(x) {
return substr(x,1,2)*60 + substr(x,3,2)
}

{
span = g($4) - g($3)
printf("%s%s%d:%02d\n", $0, OFS, int(span/60), span%60)
}

关于linux - 使用 bash 脚本将文本转换为时间格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55259394/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com