使用Awk的gsub结合正则转换日期格式无效问题排查
解决Awk中gsub日期格式转换失效的问题
问题根源
你的命令里,gsub的替换字符串写法错误,没有正确引用正则捕获到的分组内容。原替换字符串"([0-9]{4})\-([0-9]{2})\-([0-9]{2})"是字面输出括号和正则语法,而非调用捕获到的实际日期部分。
Awk中,正则捕获组的反向引用需用\1、\2、\3对应第一、第二、第三个分组,不能重复写正则表达式。
正确修改后的命令
将替换字符串改为反向引用,匹配原日期的分组顺序:
awk '{gsub(/([0-9]{2})\/([0-9]{2})\/([0-9]{4})/, "\3-\2-\1", $4)}1' OFS='\t' example.tsv > example_date.tsv
关键说明:
- 原正则
([0-9]{2})\/([0-9]{2})\/([0-9]{4})捕获三个分组:\1:DD部分(如24)\2:MM部分(如05)\3:YYYY部分(如1978)
- 替换字符串
"\3-\2-\1"会将24/05/1978转换为1978-05-24 - 把OFS改为
\t更符合TSV文件的制表符分隔规范,若需保留原多空格分隔,可继续使用OFS=' '
执行后效果
输出文件example_date.tsv内容会变为:
No Name LastName Date 1 Jane Doe 1978-05-24 2 James Cook 1974-04-04 3 Jack Smith 1978-05-24 4 John Beck 1980-10-20
内容的提问来源于stack exchange,提问作者sasa.asa
相关产品推荐
相关产品推荐

