시간 열을 기준으로 CSV 파일 필터링

시간 열을 기준으로 CSV 파일 필터링

다음 구조의 csv 파일이 있습니다. 5개의 열이 있습니다.

2/3/2018    17:00:00    39.50755167 139.94117   72
.....
2/1/2018    1:00:00     37.67323333 140.0666667 48
......

csv 파일을 필터링하고 2018년 2월 3일 17:00:00 이전에 발생한 모든 데이터 행을 선택하고 필터링된 데이터를 새 csv 파일에 저장하고 싶습니다.

답변1

귀하의 날짜는 MM/DD/YYYY(DD/MM/YYYY 아님)라고 가정합니다. 첫 번째 행을 기반으로 하지 않고 외부적으로(하드코딩된) 컷오프 값을 지정하려고 한다고 가정합니다.

gawk(GNU awk)에서 이 작업을 수행할 수 있습니다.

awk '
  BEGIN { cutoff = mktime("2018 2 3 17 0 0");
          if (cutoff < 0) { print "Bad cutoff date."; exit; } }
        {
            if (split($1, da, "/") == 3  &&  split($2, ti, ":") == 3) {
                thisdate = mktime(da[3] " " da[1] " " da[2] " " ti[1] " " ti[2] " " ti[3])
                if (thisdate >= 0  &&  thisdate < cutoff) print
            }
        }
    '

gawk의 mktime함수는 "YYYY MM DD hh mm ss" 형식의 시간 문자열을 시스템 시간으로 변환합니다. 먼저 (BEGIN) 2018년 2월 3일 17:00:00을 시스템 시간으로 변환합니다. 그런 다음 각 행에 대해 유효한 날짜 및 시간이 포함되어 있는지 확인하고 변환한 후 컷오프 값과 비교합니다.

물론 파일이 실제로 쉼표로 구분된 경우에는 -F,.

관련 정보