在 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'}
谢谢
太糟糕了,您没有在示例输入中包含任何实际上会受到此计算影响的值,但无论如何,您可以这样做:
$ 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
解决了
cat x.log | gawk '{cmd="date -d "$1 $2" +%H:%M:%S"; cmd | getline val; close(cmd); printf("%s\n",val) ; }'