簡體   English   中英

使用awk更新csv文件的日期列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM