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*\" ")
}
문제는 앞서 정의한 system
get 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...")
에서는 문자열 연결을 사용할 수 없습니다 .awk
system("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"*")
}
효과가있다! :) :)