제어문을 사용하여 AWK(GNU)에서 월 이름을 동적으로 전달

제어문을 사용하여 AWK(GNU)에서 월 이름을 동적으로 전달

안녕하세요, AWK를 사용하여 디렉터리를 검색하기 위해 월과 일(6일 전, 6월 29일)을 일치시키기 위해 아래 명령을 사용하려고 하는데 결과는 예상대로 약 1800 대신 항상 "0"입니다.

ls -ltr /test/output|awk  -v month="$(date --date="6 days ago" +"\"%b\"")", -v day="$(date --date="6 days ago" +%d)"  '$6 ==month && $7==day {print $9}'|wc -l

또한 이것을 시도했습니다.

ls -ltr /test/output|awk  -v month="$(date --date="6 days ago" +%b)", -v day="$(date --date="6 days ago" +%d)"  '$6 ==month && $7==day {print $9}'|wc -l

하지만 달을 하드코딩하면 작동합니다

ls -ltr /test/output|awk  -v month="$(date --date="6 days ago" +"\"%b\"")", -v day="$(date --date="6 days ago" +%d)"  '$6 =="Jun" && $7==day {print $9}'|wc -l

코드에서 누락된 부분을 제안해 주세요.

답변1

일반적으로 구문 분석된 출력 ls은 좋은 생각이 아닙니다. 게다가 당신은 파일 수에만 관심이 있는 것 같아서 접근 방식이 불필요하게 복잡해졌습니다. 나는 다음과 같은 것을 제안합니다:

find -maxdepth 1 -printf "%TY-%Tm-%Td\n" | grep -c $(date -d "6 days ago" +'%Y-%m-%d')

답변2

내 실수를 발견했습니다. 나는 그것을 작동시키는 다른 방법을 찾았습니다.

실제 방법, 수정된 버전:

ls -ltr /test/output|awk  -v month="$(date --date="6 days ago" +\%b)" -v day="$(date --date="6 days ago" +%d)" '$6 ==month && $7==day {print $9}'|wc -l

여기서는 월을 나타내는 '\'를 사용해야 합니다.

다른 방법

yesterday_date=`date --date="6 days ago" +'%Y%m%d'`
start_date=${yesterday_date}"0000"
end_date=${yesterday_date}"2359"
temp_start_date_file=$HOME/tmpstartfile
temp_end_date_file=$HOME/tmpendfile
touch -t $start_date ${temp_start_date_file}
touch -t $end_date ${temp_end_date_file}

cd /test/output
find . -type f -newer ${temp_start_date_file} ! -newer ${temp_end_date_file} -ls | wc -l

관련 정보