일부 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()