gpt4 book ai didi

bash - 从一次中减去一次 - bash

转载 作者:行者123 更新时间:2023-11-29 09:26:49 24 4
gpt4 key购买 nike

我有一个文本文件,其中包含日期和两个由空格分隔的时间字符串(其中很多),格式如下:

2011-03-05 15:16:41 15:16:42  

我的问题是:
使用 awk,我如何分离时间点,将它们分配给变量然后减去它们?上述字符串的答案类似于:

2011-03-05 0:0:1  

文本文件由上述格式的很多行组成。

我已经完成了 SO,看到有很多日期和时间算术问题,但似乎没有一个适合这个特定要求。

欢迎任何帮助,
斯里拉姆

最佳答案

这是一个不使用任何时间函数的简单 awk 脚本:

$ cat subtract.awk

{
hh1=substr($2,1,2);
mm1=substr($2,4,2);
ss1=substr($2,7,2);

hh2=substr($3,1,2);
mm2=substr($3,4,2);
ss2=substr($3,7,2);

time1=hh1*60*60 + mm1*60 + ss1;
time2=hh2*60*60 + mm2*60 + ss2;

diff=time2-time1;

printf "%s %d:%d:%d\n",$1,diff/(60*60),diff%(60*60)/60,diff%60;
}

输入数据:

$ cat file.txt
2011-03-05 15:16:41 15:16:42

运行它:

$ awk -f subtract.awk < file.txt

2011-03-05 0:0:1

或者,您可以使用mktime:

{
date=$1
gsub(/[-:]/," ");
diff=mktime ($1" "$2" "$3" "$7" "$8" "$9) - mktime ($1" "$2" "$3" "$4" "$5" "$6);
printf "%s %d:%d:%d\n",date,diff/(60*60),diff%(60*60)/60,diff%60;
}

关于bash - 从一次中减去一次 - bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5390184/

24 4 0