2015-10-26 58 views
1

下面是該文件的一個片段我的工作:sed命令來更改日期格式

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 

正如你所看到的日期格式爲:2802200718012007

使用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的也在發生變化GB0009252882GB00-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 

的問題是如何更改2802200718012007這個28-02-200718-01-2007沒有GB0009252882改變過。

回答

1

您的日期字段是從一開始的第15個字段。你可以寫你的模式是這樣的:

sed 's/\(\([^,]*,\)\{14\}..\)\(..\)/\1-\3-/' 

,[^,]*,描述(帶分隔符)的字段。

您還可以使用awk更容易地使用字段。你只需要輸入和輸出的分隔符​​設置爲,

使用awk(GNU),目標在15場:

awk -F, -vOFS=, '{$15=gensub(/(..)(..)(....)/, "\\1-\\2-\\3", "g", $15)}1' yourfile 

設置輸入分隔符和-vOFS=,輸出分隔符參數-F,。末尾的1用作print的快捷鍵)。

+1

隨着行錨的結束,_definitely_不需要'/ g'全局修飾符。 –

+0

@StephenP,你是對的我還沒有看到它,謝謝。 –

+0

日期不是我最後一個字段,如下所示:709ENVUN07,SET1,FE10,GB0009252882,GB,GBX,NULL,S,O,LO,1510.00000000,173,N,F,28022007,07:51:15, 3717 – Hassan