awk를 사용하여 날짜/시간 열과 초 열 추가

awk를 사용하여 날짜/시간 열과 초 열 추가

아래와 같이 csv 파일이 있습니다.

DateTime                Keywords    CallDuration       CallEndTime
2018-12-18 18:36:55    cars,petrol    120
2018-12-19 15:10:19    diesel          90
2018-12-17 15:10:19    bus             86

DateTime 및 CallDuration 열을 추가하고 해당 합계를 CallEndTime 열에 넣어야 합니다.

awk를 사용하여 이 작업을 어떻게 수행할 수 있나요?

답변1

파일이 탭으로 구분되어 있다고 가정합니다.

awk -F$'\t' '
    BEGIN{OFS="\t"}
    NR!=1{
        ("date -Iseconds -d \""$1"\"" | getline startdate)
        ("date \"+%Y-%m-%d %H:%M:%S\" -d \""startdate" + "$3" seconds\"" | getline $4)
    }1' file.csv
  • BEGIN{OFS="\t"}출력 필드 구분 기호를 탭으로 설정합니다.
  • NR!=1{...}헤더를 제외한 모든 줄에서 괄호 안의 명령을 실행합니다.
    • ("date -Iseconds -d \""$1"\"" | getline startdate)날짜를 날짜 명령의 읽기 쉬운 형식으로 변환하고 startdate변수로 저장합니다.
    • ("date \"+%Y-%m-%d %H:%M:%S\" -d \""startdate" + "$3" seconds\"" | getline $4)$3field 에서 초를 추가 startdate하고 field 로 저장합니다 $4.
  • 1이 줄을 인쇄하세요.

파일이 탭으로 구분되지 않은 경우 다음을 사용하여 수정해야 합니다 sed -i -r 's/\s\s+/\t/' file.csv.

관련 정보