쉘을 사용하여 csv 파일에 날짜/시간 열 및 시간 열(초) 추가

쉘을 사용하여 csv 파일에 날짜/시간 열 및 시간 열(초) 추가

헤더가 다음과 같은 행이 많은 csv 파일이 있습니다.

   DateTime,CallEndTime,KeywordTagTexts,TotalDuration

타이틀 키의 위치가 바뀌어서 sed를 이용하여 위치를 계산했습니다.

duration=$(sed -n $'1s/,/\\\n/gp' rawfile.csv | grep -nx 'TotalDuration' | cut -d: -f1);
callend=$(sed -n $'1s/,/\\\n/gp' rawfile.csv | grep -nx 'CallEndTime' | cut -d: -f1);
callstart=$(sed -n $'1s/,/\\\n/gp' rawfile.csv | grep -nx 'DateTime' | cut -d: -f1);

DateTime의 값은 날짜-시간 형식으로 "2018-12-18 18:36:55"이고 TotalDuration의 단위는 초입니다.

CallEndTime에 DateTime + TotalDuration 값을 추가하고 싶습니다.

답변1

아이디어는 먼저 epoch 시간(1970-01-01 00:00:00 UTC 이후의 초 수)으로 변환한 다음 기간을 추가하고 마지막으로 이전 표현으로 다시 변환하는 것입니다.

DateTime_epoch_time=$(date +%s -d $DateTime) 
CallEndTime_epoch_time=$(("$DateTime_epoch_time" + $TotalDuration))
CallEndTime=$(date '+%Y-%m-%d %H:%M:%S' -d @$CallEndTime_epoch_time)

또는 한 줄로:

date '+%Y-%m-%d %H:%M:%S' -d @$(($(date +%s -d "$DateTime") + $TotalDuration))

날짜 형식 조작에 대한 자세한 내용은 다음을 참조하세요.승인하다

답변2

예를 들어 총 기간 값을 1000으로 설정했습니다.

다음은 제가 사용한 예시 형식입니다. 이는 이전 칼럼에 추가로 게시하신 예시입니다.

2018-12-18 18:36:55, callendtime, 키워드TagTexts, 1000

수정사항이나 변경사항이 있으면 댓글로 남겨주세요

1 단계

열 1 변환(날짜/시간(초))

datetime_in_seconds=$(date -d "`awk -F "," '{print $1}' example.txt`" +%s)

2 단계

CallEndTime을 계산하려면 Column1(날짜/시간)과 마지막 열(총 기간)을 추가하세요.

k=$((datetime_in_seconds + duration_in_seconds))

이제 원래 형식으로 값을 인쇄하십시오.

최종 주문

awk -F "," -v k="$k"  'OFS=","{$2=$2"="k;print $0}' example.txt

산출

2018-12-18 18:36:55,callendtime=1545188015,KeywordTagTexts,1000

관련 정보