다음 구조의 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,
.