좋아요, 약 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/
.