헤더가 다음과 같은 행이 많은 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