gpt4 book ai didi

bash - Grep 文件中的日期并格式化它们

转载 作者:行者123 更新时间:2023-12-05 04:49:42 25 4
gpt4 key购买 nike

我有一个看起来像这样的文件“tmp.txt”:

random text random text 25/06/2021 15:15:15
random text random text 26/06/2021 15:15:15
random text random text 26/06/2021 15:15:15

我想:

  1. 提取所有日期时间
  2. 增加 4 小时
  3. 将它们显示为时间戳

我还不知道如何添加小时,因为我遇到了日期函数无法识别日期格式的问题。

(如果可能的话,我希望能够用一行命令来完成)

这是我当前的命令:

egrep -o "[0-9]{2}/[0-9]{2}/[0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2}" tmp.txt | while read -r line ; do echo $(date -d  "$line" +%s);done

感谢帮助!

最佳答案

久经考验的最小解决方案

您可以使用以下命令行来获得所需的结果。我已经用您的示例对其进行了测试,它在我的 Linux 机器上按预期工作。

egrep -o "[0-9]{2}/[0-9]{2}/[0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2}" tmp.txt | while read -r line; do dd=${line:0:2}; mm=${line:3:2}; yyyy=${line:6:4}; time=${line:11:8}; date -d "${yyyy}-${mm}-${dd} ${time} 4 hours" +'%Y-%m-%d %H:%M:%S'; done

我将把它分成多行以便于理解:

egrep -o "[0-9]{2}/[0-9]{2}/[0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2}" tmp.txt \
| \
while read -r line; do
# Reading date and time into separate variables
dd=${line:0:2};
mm=${line:3:2};
yyyy=${line:6:4};
time=${line:11:8};
# Adding 4 hours and displaying datetime in desired format
date -d "${yyyy}-${mm}-${dd} ${time} 4 hours" +'%Y-%m-%d %H:%M:%S';
done

要增加 4 小时,您可以在 -d 选项中的日期时间之后提及它,如上所示,我尝试使用小时、分钟和天,它按预期工作

对于您的输入文件 tmp.txt:

random text random text 25/06/2021 15:15:15
random text random text 26/06/2021 15:15:15
random text random text 26/06/2021 15:15:15

在运行我的命令时,输出是:

2021-06-25 19:15:15
2021-06-26 19:15:15
2021-06-26 19:15:15

我用接近午夜时间、闰年等极端情况对其进行了测试,它运行良好

关于bash - Grep 文件中的日期并格式化它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67527302/

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