csv 파일의 특정 열(마지막 세 번째 열)에서 날짜를 필터링합니다. 또한 마지막 세 번째 열이 비어 있으면 다음 줄을 인쇄하십시오.

csv 파일의 특정 열(마지막 세 번째 열)에서 날짜를 필터링합니다. 또한 마지막 세 번째 열이 비어 있으면 다음 줄을 인쇄하십시오.

입력 csv 파일은 다음과 같습니다.

23,54,one,tree,56,23,7/20/2017 17:00,iii,89
23,54,one,tree,56,23,7/20/2017 17:00,iii,89
23,54,one,tree,56,23,7/21/2017 17:00,iii,89
23,54,one,tree,56,23,7/30/2017 17:00,iii,89

현재 날짜를 얻으려면 쉘 명령이 필요합니다형식을 지정한 7/20/2017다음 csv 파일의 세 번째 열부터 마지막 ​​열까지 동일한 날짜를 사용하여 필터링합니다(열은 첫 번째 열부터 감지해서는 안 됩니다. 그렇지 않으면 쉼표로 인해 차이가 발생하므로 세 번째 열부터 마지막 ​​열까지 시작해야 합니다).

답변1

awk -F, -v "today=$(date "+%m/%d/%Y" | sed 's/^0//')" '$(NF-2) ~ "^"today' file

sed 사용이 불편하다면 날짜 매뉴얼 페이지를 주의 깊게 읽어보세요.

awk -F, -v "today=$(date "+%-m/%d/%Y")" '$(NF-2) ~ "^"today' file
# .........................^^^

마지막 열에서 세 번째 열이 비어 있거나 "오늘"인 경우

awk -F, -v "today=$(date "+%-m/%d/%Y")" '$(NF-2) == "" || $(NF-2) ~ "^"today' file

답변2

단일 GNU 사용프로세스:

awk -F',' 'BEGIN{ d=strftime("%-m/%d/%Y", systime()) }
          $(NF-2)~/^[[:space:]]*$/{ print > "empty_dates.txt" }$(NF-2)~d' file
  • $(NF-2)~/^[[:space:]]*$/{ print > "empty_dates.txt" }- 세 번째 필드(마지막)가 비어 있는 경우 - 해당 줄을 파일로 인쇄합니다 empty_dates.txt(원하는 파일 이름을 지정할 수 있습니다).

관련 정보