以下是我正在使用的文件的片段:
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
也不会更改。
答案 0 :(得分:1)
[编辑]
您的日期字段是从开始的第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
用作print
)的快捷方式。