日付列で年を分割し、awk または sed を使用して年を含む新しい列を作成します。

日付列で年を分割し、awk または sed を使用して年を含む新しい列を作成します。

以下のようにcsv形式のデータセットがあります(6000行)。

Store,Date,Weekly_Sales,Holiday_Flag,Temperature,Fuel_Price,CPI,Unemployment
1,05-02-2010,1643690.9,0,42.31,2.572,211.0963582,8.106
1,12-02-2010,1641957.44,1,38.51,2.548,211.2421698,8.106
---
---

日付列を分割して、年だけを含む新しい列を作成したいと思います。このような:

Store,Date,Year,Weekly_Sales,Holiday_Flag,Temperature,Fuel_Price,CPI,Unemployment
1,05-02-2010,2010,1643690.9,0,42.31,2.572,211.0963582,8.106
1,12-02-2010,2010,1641957.44,1,38.51,2.548,211.2421698,8.106

このコードを使用しようとしていますが、問題を解決するために修正する方法がわかりません。 年を抽出する方法...

誰でも私にアドバイスを与えることができますか?

ベストアンサー1

私はcsv次のような適切なパーサーを使用します。csvkit:

csvsql --query "select Store,Date,strftime('%Y', Date) as Year,Weekly_Sales,Holiday_Flag,Temperature,Fuel_Price,CPI,Unemployment  from data" data.csv

出力:

Store,Date,Year,Weekly_Sales,Holiday_Flag,Temperature,Fuel_Price,CPI,Unemployment
1,2010-05-02,2010,1643690.9,0,42.31,2.572,211.0963582,8.106
1,2010-12-02,2010,1641957.44,1,38.51,2.548,211.2421698,8.106

ただし、これを使用してこれを行うには、awk次のようにします。

awk '
  BEGIN{FS=OFS=","}
  NR==1{$2="Date,Year"}
  NR>1 {sub(/[0-9]{4}/, "&,&", $2)}
1' data.csv

おすすめ記事