특정 디렉토리의 토요일 또는 일요일 날짜가 포함된 csv 파일의 모든 행을 찾는 방법은 무엇입니까?

특정 디렉토리의 토요일 또는 일요일 날짜가 포함된 csv 파일의 모든 행을 찾는 방법은 무엇입니까?

일부 csv 파일이 포함된 디렉토리가 있습니다. 토요일이나 일요일 날짜가 포함된 파일과 줄 번호를 찾고 싶습니다. 날짜 형식은 dd.mm.2019입니다. 아래 코드가 맞나요? 다른 방법이 있나요?

grep -n '^5.1.2019|^6.1.2019|^12.1.2019|^13.1.2019|^19.1.2019|^20.1.2
019|^26.1.2019|^27.1.2019|^2.2.2019|^3.2.2019|^9.2.2019|^10.2.2019|^16.2.2019|^17.2.2019|^23.2.2019|^24.2.2019|^2.3.2019|^3.3.2019|^9.3.2019|^10.3.2019|^16.3.2019|^17.3.2019|^23.3.2019|^24.3.2019|^30.3.2019|^31.3.2019|^6.4.2019|^7.4.2019|^13.4.2019|^14.4.2019|^20.4.2019|^21.4.2019|^27.4.2019|^28.4.2019|^4.5.2019|^5.5.2019|^11.5.2019|^12.5.2019|^18.5.2019|^19.5.2019|^25.5.2019|^26.5.2019|^1.6.2019|^2.6.2019|^8.6.2019|^9.6.2019|^15.6.2019|^16.6.2019|^22.6.2019|^23.6.2019|^29.6.2019|^30.6.2019|^6.7.2019|^7.7.2019|^13.7.2019|^14.7.2019|^20.7.2019|^21.7.2019|^27.7.2019|^28.7.2019|^3.8.2019|^4.8.2019|^10.8.2019|^11.8.2019|^17.8.2019|^18.8.2019|^24.8.2019|^25.8.2019|^31.8.2019|^1.9.2019|^7.9.2019|^8.9.2019|^14.9.2019|^15.9.2019|^21.9.2019|^22.9.2019|^28.9.2019|^29.9.2019|^5.10.2019|^6.10.2019|^12.10.2019|^13.10.2019|^19.10.2019|^20.10.2019|^26.10.2019|^27.10.2019|^2.11.2019|^3.11.2019|^9.11.2019|^10.11.2019|^16.11.2019|^17.11.2019|^23.11.2019|^24.11.2019|^30.11.2019|^1.12.2019|^7.12.2019|^8.12.2019|^14.12.2019|^15.12.2019|^21.12.2019|^22.12.2019|^28.12.2019|^29.12.2019$' *.csv

답변1

BEGIN { FS = "," }
{
        split($1, a, ".")
        timestamp = mktime(sprintf("%.4d %.2d %.2d 00 00 00", a[3], a[2], a[1]))
        day = strftime("%u", timestamp)
}

day >= 6

이 GNU awk(또는 mawk) 스크립트는 질문에 지정한 형식으로 첫 번째 쉼표로 구분된 필드에서 날짜를 읽습니다. 필드를 분할하고 이를 호출하여 mktime()각 읽은 날짜의 자정에 해당하는 Unix 타임스탬프 값을 구성합니다.

그런 다음 함수가 요일을 1(월요일)과 7(일요일) 사이의 10진수 정수로 반환하도록 하는 strftime()형식 문자열을 사용합니다 .%u

마지막 줄은 주말의 값을 테스트하고 테스트가 성공하면 현재 줄을 인쇄합니다. 줄번호만 출력하고 싶다면 로 변경하세요 day >= 6 { print FNR }.

당신은 이렇게 실행할 것입니다

$ awk -f script.awk myfile.csv

이 스크립트에는 GNU awk또는 GNU가 필요하며, 그렇지 않으면 mawk이러한 기능을 사용하지 못할 수도 있습니다.mktime()strftime()

관련 정보