AWK 명령에 여러 검색을 추가하는 방법

AWK 명령에 여러 검색을 추가하는 방법

6월, 7월, 8월에 생성된 파일을 검색하려고 합니다. 나는 이 방법을 사용했다

ls -lrth|awk '/[Jun][Jul][Aug]/ {print}'

하지만 작동하지 않습니다.

답변1

아래와 같이 여러 패턴을 일치시킬 수 있습니다.

awk '/Jun/ || /July/ || /Aug/' <(ls -lrh)

그러면 Jun, July, August가 모두 반환됩니다. print이것이 awk기본 작업 이므로 이 문은 필요하지 않습니다 .

답변2

일반적으로 말하면 이것은 매우 나쁜 생각입니다.ls의 출력을 구문 분석합니다.. 원하는 것을 수행하는 더 좋은 방법은

stat -c "%n %y" * | grep 2013-0[678]

또는 파일 이름 자체가 날짜인 경우를 방지하려면 마지막 필드만 확인하세요.

stat -c "%n %y" *| awk '$NF ~ /2013-0[678]/' 

에서 man stat:

   -c  --format=FORMAT
          use the specified FORMAT instead of the default; output  a  new‐
          line after each use of FORMAT

   %y     time of last modification, human-readable
   %n     file name

답변3

ls사람이 읽을 수 있는 형식으로 파일에 대한 정보를 표시하는 명령입니다.스크립트에서는 사용하지 마세요.

디렉토리 트리에서 특정 기준과 일치하는 파일을 찾는 명령은 다음과 같습니다.find. GNU 찾기(예: 내장되지 않은 Linux 또는 Cygwin) 또는 FreeBSD 찾기(예: FreeBSD 또는 OSX)가 있는 경우 -newermt특정 날짜 이후 마지막으로 수정된 파일을 일치시키는 데 사용할 수 있습니다 .

find . -newermt '1 June' ! -newermt '1 September' -print

스크립트가 실행되는 연도가 아닌 특정 연도와 일치하는 파일을 원하는 경우 연도를 추가하십시오.

찾기 구현에 발견된 파일의 날짜를 고정된 파일과 비교하는 가 없는 경우 -newermt사용해야 합니다 . 사용할 날짜로 제한된 임시 파일을 만드는 데 사용됩니다 .-newerfindtouch

dir=$(mktemp -d)
touch -d 201306010000 "$dir/from"
touch -d 201309010000 "$dir/to"
find . -newer "$dir/from" ! -newer "$dir/to" -print
rm -r "$dir"

관련 정보