[英]updation of date column of csv file using awk
CSV文件中存在的行,例如。
POC,1234567890,2345678901,2014-06-03 09:20:43,250
我只想更新日期列(第4列-日期時間)而不更新csv文件的時間。 但是我的awk命令正在更新完整的第4列,並且時間被截斷了,這是我不想要的,我該怎么做?
Awk命令
awk -F, 'NR>2 && NR<=1000{$4="2015-07-01";}1' OFS=, Input.csv> Output.csv
在output.csv文件中不應將時間截斷。(日期和時間以空格分隔)
輸出應該是
POC,1234567890,2345678901,2015-07-01 09:20:43,250
注意:1.原始文件中的所有日期都不相同,但都需要轉換為相同的新日期。 2.原始文件中的日期格式可以是任何格式(dd-M-yyyy / dd-MM-yyyy / dd-MMM-yy)
sub(/2014-06-03/, "2015-07-01", $4)
您尚未真正指出原始日期是否全部相同,以及是否都需要將它們都轉換為相同的新日期,但是sub
命令執行基於正則表達式的替換。
原始文件中的所有日期都不相同,但是都需要轉換為相同的新日期。
因此,正則表達式需要更復雜一些:
sub(/[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]/, "2015-07-01", $4)
您可以將第一個[0-9]
更改為[12]
如果不保留為2)。您可以玩其他游戲(一個月為[01][0-9]
等)。 但是有時候簡單就足夠了。 您不是在驗證舊日期; 您要替換它。
這是只替換第4列中日期組件的腳本。
awk -F, 'NR>2 && NR<=1000{sub(/[^[:space:]]*/,"2015-07-01",$4);}1' OFS=, Input.csv> Output.csv
由於$4
具有固定值,因此這是一種快速而丑陋的方法:
awk 'NR>2 && NR<=1000{$4="2015-07-01";}1' FS="( |,)" OFS="," Input.csv |sed -e "s/-01,/-01 /" > Output.csv
我個人更喜歡喬納森的潮流。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.