gpt4 book ai didi

Bash 和 awk : converting a field from 12 hour to 24 hour clock time

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

我有一个大的 txt 文件空间分隔,我将其分成 18 个较小的文件(每个文件都有自己的列数)。此拆分基于分隔符,即每当时间戳达到午夜时。如此有效,我将以以下形式得到 18 个文件(请注意,忽略破折号和竖线,我使用它们来提高可读性):

文件1

time ----------- valueA - valueB  
12:00:00 AM | 54.13 | 239.12
12:00:01 AM | 51.83 | 119.93
..

file18

time ---------- valueA - valueB - valueC - valueD  
12:00:00 AM | 54.92 | 239.12 | 231.23 | 882.12
12:00:01 AM | 23.92 | 121.92 | 201.23 | 892.12
..

一旦我拆分文件,我就会使用 AWK 对每个文件执行一些处理,所以简而言之,有 2 个阶段,即“拆分阶段”和“处理阶段”。

不幸的是,包含在大型 txt 文件中的时间戳是 2 种格式中的一种。理想的 24 小时格式“00:00:01”或不良的 12 小时格式“12:00:01 AM”。

因此,我试图将所有格式转换为 24 小时制,但我不确定该怎么做。我也不确定是在拆分阶段使用 bash 还是在处理阶段使用 AWK 尝试这样做。我知道以下函数将 12 小时转换为 24 小时

'date --date="12:00:01 AM" +%T'

但是,如果我在“拆分阶段”使用“while read line”或者我是否应该在 AWK 中进行时间转换(如果可能的话?),我不确定如何将它合并到我的 shell 脚本中“处理阶段”。

最佳答案

看看下面的测试,对你有帮助吗?

 kent$  echo "12:00:00 AM |      54.92 | 239.12  | 231.23  | 882.12  "\
|awk -F'|' 'BEGIN{OFS="|"}{("date --date=\""$1"\" +%T") |getline $1;print }'

输出

 00:00:00|      54.92 | 239.12  | 231.23  | 882.12

关于Bash 和 awk : converting a field from 12 hour to 24 hour clock time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8083973/

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