如何通过Shell将文本文件中的日期格式转换为24小时制?
如何通过Shell将文本文件中的日期格式转换为24小时制?
示例输入(data.txt)
/stem/1 sts1033 08/29/2022 09:05:48 PM OX crN 51 Backup /stem/2 sts1033 09/05/2022 09:05:18 PM OY crN 507 Backup /stem/3 sts1033 09/12/2022 09:16:14 PM OX crN 5123 Backup
期望输出
/stem/1 sts1033 08/29/2022 21:05:48 OX crN 51 Backup /stem/2 sts1033 09/05/2022 21:05:18 OY crN 507 Backup /stem/3 sts1033 09/12/2022 21:16:14 OX crN 5123 Backup
解决方案:使用awk结合date命令
针对固定格式的文本,可通过awk逐行处理,并调用date命令完成时间格式转换:
GNU/Linux环境命令
awk '{ dt = $3 " " $4 " " $5 cmd = "date -d \"" dt "\" +\"%H:%M:%S\"" cmd | getline new_time close(cmd) $4 = new_time $5 = "" print $0 }' data.txt
macOS/BSD环境命令
BSD系date命令参数与GNU不同,需调整格式:
awk '{ dt = $3 " " $4 " " $5 cmd = "date -j -f \"%m/%d/%Y %I:%M:%S %p\" \"" dt "\" \"+%H:%M:%S\"" cmd | getline new_time close(cmd) $4 = new_time $5 = "" print $0 }' data.txt
工作原理
- 拼接时间字符串:提取每行的日期(
$3)、12小时制时间($4)和AM/PM标记($5),组合成date可解析的格式。 - 调用date转换:通过
date命令将12小时制时间转换为24小时制的%H:%M:%S格式。 - 替换并输出:用转换后的时间替换原时间字段,移除AM/PM标记,打印处理后的整行。
内容的提问来源于stack exchange,提问作者True Entertainer
相关产品推荐
相关产品推荐

