특정 일치 번호가 있는 파일을 반복합니다.

특정 일치 번호가 있는 파일을 반복합니다.

저는 Bash 스크립트를 사용하고 있으며 두 개의 입력 번호가 있습니다. 단순화를 위해 첫 번째 변수를 Start라고 하고 두 번째 변수를 Stop이라고 하며 각 변수는 1000에서 2000 사이의 숫자일 수 있다고 가정합니다.

내 파일은 각 숫자의 처음 두 자리와 일치하는 이름으로 정렬됩니다. 예를 들어 다음과 같은 파일 이름이 있습니다.

/path/to/files11: 1100에서 1199(포함) 사이의 숫자에 해당하는 파일

이제 Stop 및 Start가 주어지면 루프를 사용하여 다음과 같이 올바른 파일을 문자열로 설정하고 싶습니다. Start = 1923이고 Stop = 2267인 경우 다음을 수행하고 싶습니다(의사 코드).

MyVariable = "/path/to/files19;/path/to/files20;/path/to/files21;/path/to/files22"

하지만 나는 내 범위의 모든 숫자에 대해 이 작업을 수행할 수 있기를 원합니다.

처음 두 자리 숫자를 기반으로 올바른 시작 및 중지 파일을 선택하고 숫자를 반복하여 올바른 문자열을 얻는 방법에 대한 제안 사항이 있습니까?

답변1

배쉬를 사용하여

노력하다:

Start=1923
Stop=2267
MyVar=
for ((i=Start/100; i<=Stop/100; i++)); do 
    MyVar="$MyVar;/path/to/files$i"
done
MyVar=${MyVar:1}
echo "$MyVar"

위의 echo명령문은 다음을 생성합니다.

/path/to/files19;/path/to/files20;/path/to/files21;/path/to/files22

작동 방식:

  • MyVar=

    이렇게 하면 변수 MyVar가 비어 있게 됩니다.

  • for ((i=Start/100; i<=Stop/100; i++)); do

    그러면 변수에 대한 루프가 시작됩니다 i.

  • MyVar="$MyVar;/path/to/files$i"

    MyVar루프가 실행될 때마다 문자열이 추가됩니다.

  • done

    이는 사이클의 끝을 나타냅니다.

  • MyVar=${MyVar:1}

    이렇게 하면 문자열 시작 부분에서 원하지 않는 세미콜론이 제거됩니다.

  • echo "$MyVar"

    그러면 결과가 표시됩니다.

awk를 사용하세요

매우 유사한 논리를 사용합니다.

MyVar=$(awk -v Start=1923 -v Stop=2267 'BEGIN{for (i=int(Start/100);i<=int(Stop/100);i++) MyVar=MyVar";/path/to/files" i; print substr(MyVar,2)}')
echo "$MyVar"

위의 echo명령문은 다음을 생성합니다.

/path/to/files19;/path/to/files20;/path/to/files21;/path/to/files22

답변2

이는 중괄호 확장 작업과 일부 문자열 조작 평가 작업처럼 보입니다.

MyVariable=$(eval "printf '%s' /path/to/files{${Start:0:2}..${Stop:0:2}}\;")

그런 다음 마지막 세미콜론을 제거하고 싶을 수도 있습니다.${MyVariable%;}

위의 예에서는 your ${Start}${Stop}true가 항상 최소 3자리라고 가정합니다. 그렇지 않으면 문자열 연산을 조정해야 합니다.

관련 정보