Date sed命令更改日期格式
下面是我正在处理的文件的一个片段:Date sed命令更改日期格式,date,unix,sed,format,command,Date,Unix,Sed,Format,Command,下面是我正在处理的文件的一个片段: 709ENVUN07,SET1,FE10,GB0009252882,GB,GBX,NULL,S,O,LO,1510.00000000,173,N,F,28022007,07:51:15,3717 208ATNHG07,SET1,FE10,GB0009252882,GB,GBX,NULL,S,O,LO,1550.00000000,1800,N,F,18012007,15:48:21,654681 如您所见,日期的格式如下:28022007,18012007 使
709ENVUN07,SET1,FE10,GB0009252882,GB,GBX,NULL,S,O,LO,1510.00000000,173,N,F,28022007,07:51:15,3717
208ATNHG07,SET1,FE10,GB0009252882,GB,GBX,NULL,S,O,LO,1550.00000000,1800,N,F,18012007,15:48:21,654681
如您所见,日期的格式如下:28022007
,18012007
使用sed,我已成功地更改为我希望的格式
gzip -dc allGlaxoOrderHistory.CSV.gz |sed 's/\([0-9]\{2\}\)\([0-9]\{2\}\)\(2[0-9]\{3\}\)/\1-\2-\3/g' > newOrderHistory.csv
但是,sed也将GB0009252882
更改为GB00-09-252882
,如下所示
709ENVUN07,SET1,FE10,GB00-09-252882,GB,GBX,NULL,S,O,LO,1510.00000000,173,N,F,28-02-2007,07:51:15,3717
208ATNHG07,SET1,FE10,GB00-09-252882,GB,GBX,NULL,S,O,LO,1550.00000000,1800,N,F,18-01-2007,15:48:21,654681
问题是如何将28022007
,18012007
更改为28-02-2007
,18-01-2007
,而不同时更改GB0009252882
。[编辑]
日期字段是从开始算起的第15位。您可以这样编写模式:
sed 's/\(\([^,]*,\)\{14\}..\)\(..\)/\1-\3-/'
其中,,[^,]*,
描述一个字段(带分隔符)
使用awk还可以更轻松地按字段工作。您只需将输入和输出分隔符设置为,
使用awk(Gnu),瞄准第15个字段:
awk -F, -vOFS=, '{$15=gensub(/(..)(..)(....)/, "\\1-\\2-\\3", "g", $15)}1' yourfile
参数
-F,
设置输入分隔符,-vOFS=,
设置输出分隔符。结尾处的1
用作打印的快捷方式。使用线尾定位,您肯定不需要/g
全局修饰符。日期不是我的最后一个字段,您可以在下面查看:709ENVUN07,SET1,FE10,GB0009252882,GB,GBX,NULL,S,O,LO,1510.00000000 173,N,F,28022007,07:51:153717以前从未使用过awk,请告知我如何使用它example@Hassan ... 如果没有其他8位字段,您可以(象征性地)s/,DDMMYYYY,/,DD-MM-YYYY,/
。。。也就是说,在匹配中包含周围的逗号,并确保将它们放回替换项中。您还应使用此完整记录编辑您的问题——仅使用部分3字段示例,您的问题具有误导性。@StephenP谢谢,我已根据要求更改了问题以演示完整字段,但是s/,DDMMYYYY,/,DD-MM-YYYY,/没有做任何事情