날짜 열에서 연도를 분할하고 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

답변2

 awk 'BEGIN{FS=OFS=","}NR==1{gsub("Date","Date,year",$0)} NR>1 {$2=$2","substr($2,7,4)}1' filename

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

관련 정보