파일 콘텐츠에서 번호 범위를 찾고 해당 번호 범위가 포함된 파일을 다른 디렉터리로 이동하는 방법은 무엇입니까?

파일 콘텐츠에서 번호 범위를 찾고 해당 번호 범위가 포함된 파일을 다른 디렉터리로 이동하는 방법은 무엇입니까?

좋아요, 약 90개의 파일이 있고 각 파일의 본문은 다음과 같습니다.

187942           78.9

두 번째 열의 값이 70에서 90 사이인 파일을 필터링하여 다른 디렉터리로 이동하고 싶습니다.

답변1

작은 스크립트를 사용하여 awk좋은 파일과 나쁜 파일을 구별할 수 있습니다. 예를 들어 아래와 같습니다.

#!/bin/bash
mkdir -p another-directory
for f in * ; do 
    if ! awk '$2>=70 && $2<=90 { exit 1; }' "$f" ; then
        mv -- "$f" another-directory/
    fi
done

여기서 핵심은 이것이 exit 1실패 종료라는 점입니다. 따라서 조건문 with는 awk단순히 두 번째 토큰이 70에서 90(포함) 사이의 숫자인 행의 존재를 감지합니다. 그렇지 않으면 awk정상적으로 종료하고 성공합니다. 느낌표는 이를 부정하여 파일에 좋은 줄이 있으면 조건을 true로 만들고 그렇지 않으면 false로 만듭니다.

답변2

사용 awk:

awk '$2>70&&$2<90&&!a[FILENAME]++{printf("%s%c",FILENAME,0)}' * | xargs -0 cp -vt target/ --

설명하다:

  • $2>70&&$2<90상태.
  • !a[FILENAME]++파일 이름이 고유하면 참입니다(파일 이름은 한 번만 인쇄됩니다).
  • printf("%s%c",FILENAME,0)특수 파일 이름을 처리하기 위해 널 바이트 구분 기호를 사용하여 파일 이름을 인쇄합니다.
  • xargs -0널 바이트로 구분된 파일 이름을 읽습니다.
  • cp -vt target/ --파일을 디렉토리에 복사합니다 target/.

관련 정보