지정된 파일 이름을 가진 파일을 나열하는 awk 스크립트

지정된 파일 이름을 가진 파일을 나열하는 awk 스크립트

awk문자열을 패턴으로 사용하고 이름에 이 패턴이 있는 디렉터리의 모든 파일을 나열하는 스크립트를 작성하려고 합니다 . 하지만 awk함수에 디렉터리의 모든 파일 이름을 읽도록 지시하는 방법을 모르겠습니다 ( find이 경우 명령은 도움이 되지 않습니다). 내 입력 모드는 날짜 형식 YYYYMMDD이고 내 파일 형식은 YYYY-MM-DD.

.awk이것이 내 파일 에서 수행하려는 작업입니다 .

#! /usr/bin/awk -f

BEGIN{
Directory="history/"

date="20180522"

validDate=substr(date,0,4)"-"substr(date,5,2)"-"substr(date,7,2)
printf Directory
system("find $Directory -maxdepth 1 -type f -name \"validDate*\" ") 
}

문제는 앞서 정의한 systemget write 값을 어떻게 구별하느냐이다.$Directory$validDate

답변1

awk사용자로부터 날짜를 형식으로 가져온 YYYYMMDD다음 YYYY-MM-DD파일 검색을 위한 형식 으로 변환 하려는 것 같습니다 .

awk대화형 프로그래밍보다 스트림 구문 분석에 더 적합합니다. 또한 파일 계층 구조를 탐색하는 방법도 모릅니다.

다음은 쉘 스크립트를 사용하여 사용자로부터 데이터를 읽고 이를 사용하여 find파일을 찾는 제안입니다.

#!/bin/sh

thedate="$1"

if [ -z "$thedate" ]; then
    printf 'Enter year (YYYY): ' >&2
    read theyear
    printf 'Enter month  (MM): ' >&2
    read themonth
    printf 'Enter day    (DD): ' >&2
    read theday

    thedate="$theyear-$themonth-$theday"
fi

find /path/to/history -type f -name "*$thedate*"

명령줄 인수를 사용하거나 사용하지 않고 스크립트를 실행할 수 있습니다. 스크립트가 명령줄 인수와 함께 사용되는 것을 감지하면 올바른 형식의 날짜 문자열이라고 가정하고 있는 그대로 사용하여 파일을 찾습니다.

답변2

find다음 세 가지 방법 중 하나로 사용할 수 있습니다 .

디렉토리 자체 내에서 history:

find . -maxdepth 1 -type f -name \*pattern\*

history해당 디렉토리가 포함된 위의 디렉토리 에서

find . -maxdepth 1 -type f -name \*pattern\*

어디서나:

find /path/to/history -maxdepth 1 -type f -name \*pattern\*

find찾고 있는 패턴으로 명령에 입력을 전달할 수 있습니다 .

답변3

많은 검색과 친구들의 도움 끝에 해결책을 찾았습니다. 친구의 도움으로 댓글의 오류를 수정하여 다른 분들도 참고하실 수 있도록 게시합니다. ~처럼아마단설명하다:

.: ("....$Directory...")에서는 문자열 연결을 사용할 수 없습니다 .awksystem("find " Directory " -maxdepth 1 -type f -name \"validDate*\" ")

그래서 다음과 같이 스크립트를 업데이트했습니다.

#! /usr/bin/awk -f

BEGIN{
Directory="history/"

date="20180522"

validDate=substr(date,0,4)"-"substr(date,5,2)"-"substr(date,7,2)
printf Directory
system("find " $Directory " -maxdepth 1 -type f -name " validDate"*") 
}

효과가있다! :) :)

관련 정보