使用Awk将CSV转制表符分隔时如何保留24小时时间格式?
解决CSV转制表符文件时保留原时间格式的问题
首先纠正你原Awk命令的语法错误:你写的FS = "","是错误的,正确的逗号分隔符设置应该是FS=",",修正后的基础命令是:
awk 'BEGIN{FS=","; OFS="\t"} {$1=$1}1' input > output
为什么时间格式会变?
你的Awk命令根本不会修改时间字符串的内容——出现24小时制变12小时制的问题,是因为你用Excel这类表格工具打开输出文件时,它自动识别了时间格式并强制转换成了12小时制显示,实际文件里的时间还是1/1/1900 15:45。你可以用纯文本编辑器(比如Notepad++、Vim,或者终端里用cat output命令)打开输出文件验证这一点。
如何让表格工具也保留原格式?
如果需要让Excel等工具不自动转换时间格式,有两种实用方案:
- 修改Awk命令,把时间字段标记为纯文本
在输出时给时间字段加上单引号前缀,这样表格工具会把它当成纯文本处理:
awk 'BEGIN{FS=","; OFS="\t"} { for(i=1;i<=NF;i++){ # 匹配类似MM/DD/YYYY HH:MM的时间格式 if($i ~ /^[0-9]+\/[0-9]+\/[0-9]+ [0-9]+:[0-9]+$/){ $i = "\047" $i # \047是单引号的转义写法,避免语法冲突 } } $1=$1 }1' input > output
- 导入表格工具时手动设置格式
用Excel导入制表符文件时,在“文本导入向导”里,找到时间所在的列,把列数据格式设置为文本,再完成导入,这样就能保留原有的24小时制时间显示。
内容的提问来源于stack exchange,提问作者jay
相关产品推荐
相关产品推荐

