将 awk 排序从 12 小时制转换为 24 小时制

问题描述 投票:0回答:2

在 Linux 上使用 gawk 或类似的命令行,我想将 12 小时制日期/时间转换为 24 小时制以进行排序。

样本数据是

11/29/2016,9:42:21 AM
11/29/2016,12:42:26 PM
11/29/2016,12:42:27 PM
11/29/2016,12:42:50 PM

我使用事件日志了解到了这一点

cat  event_log.csv  |gawk -F \,  {'print $2'}

谢谢

linux awk command-line-interface gawk
2个回答
2
投票

太糟糕了,您没有在示例输入中包含任何实际上会受到此计算影响的值,但无论如何,您可以这样做:

$ awk -F'[ ,:]' '
    ($5 == "AM") && ($2 == 12) { d = -12 }
    ($5 == "PM") && ($2 <  12) { d =  12 }
    { printf "%s,%02d:%s:%s\n", $1, $2 + d, $3, $4; d=0 }
' file
11/29/2016,09:42:21
11/29/2016,23:42:26
11/29/2016,12:42:27
11/29/2016,00:42:27

上面是针对此输入文件运行的(根据 OP 提供的输入进行修改,以具有可测试代码的值):

$ cat file
11/29/2016,9:42:21 AM
11/29/2016,11:42:26 PM
11/29/2016,12:42:27 PM
11/29/2016,12:42:27 AM

-2
投票

解决了

cat x.log | gawk '{cmd="date -d "$1 $2" +%H:%M:%S"; cmd | getline val; close(cmd); printf("%s\n",val) ; }'
© www.soinside.com 2019 - 2024. All rights reserved.