와일드카드 할당 변수의 매개변수 확장

와일드카드 할당 변수의 매개변수 확장

현재 폴더(MA502)에 두 개의 파일이 있고 해당 이름은 -

MA502_TAAGGCGA-TCGCAGG_L001_R1_001.at.fastq
MA502_TAAGGCGA-TCGCAGG_L001_R2_001.at.fastq

예를 들어 MA503, MA504 등과 같은 폴더가 많이 있는데 그 폴더를 반복하고 싶습니다.

와일드카드를 사용하여 변수 이름을 할당합니다.

Forward=*R1*.at.fastq
Reverse=*R2*.at.fastq

이 파일을 스크립트로 처리하고 최종 이름이 다음과 같도록 .at출력 을 대체하고 싶습니다..atqt

MA502_TAAGGCGA-TCGCAGG_L001_R1_001.atqt.fastq
MA502_TAAGGCGA-TCGCAGG_L001_R2_001.atqt.fastq

나는 노력했다

awk 'script' $Forward > ${Forward/.at/.atqt}

내 최종 파일 이름은 다음과 같습니다 -

*R1*.atqt.fastq

내가 기대했던 것 대신에

MA502_TAAGGCGA-TCGCAGG_L001_R1_001.atqt.fastq

나는 유닉스에서 모든 것을 배웠기 때문에 변수 이름이 어떻게 처리되는지 잘 모르겠습니다. 도움을 주시면 감사하겠습니다!

답변1

이 명령은 Forward=*R1*.at.fastq변수를 Forward문자열 *R1*.at.fastq(별표, 대문자 R, 숫자 1, 별표, 점, 소문자 A 등)로 설정합니다. 와일드카드는 여러 단어가 허용되는 컨텍스트에서만 확장됩니다. 변수 할당의 오른쪽에는 단일 단어가 필요하므로 와일드카드 확장은 발생하지 않습니다.

비슷한 명령에서는 cat $Forward값의 와일드카드 문자가 Forward확장됩니다. 변수가 큰따옴표 외부로 확장되면 해당 값은 공백으로 구분된 와일드카드 패턴 목록으로 해석되며 패턴이 하나 이상의 파일과 일치하는 경우 파일 목록으로 대체됩니다.

에서 ${Forward/.at/.atqt}먼저 변수 값을 찾습니다 *R1*.at.fastq. 그런 다음 해당 문자열에 텍스트 대체가 적용되어 *R1*.atqt.fastq. 결과는 따옴표가 없는 변수 확장이므로 와일드카드 패턴으로 해석됩니다. 하지만 *R1*.atqt.fastq일치하는 파일이 없으므로 변경되지 않습니다.

설정할 때 와일드카드를 확장하려면 Forward배열로 만들 수 있습니다.

Forward=(*R1*.at.fastq)

Forward이는 요소가 문자열인 1 요소 배열로 설정됩니다 MA502_TAAGGCGA-TCGCAGG_L001_R1_001.at.fastq. 와일드카드 패턴은 둘 이상의 단어가 예상되는 컨텍스트(배열 할당 주위의 괄호)에 있기 때문에 일치 목록으로 확장됩니다.

Bash에서 is가 배열 $Forward인 경우 이는 스칼라 변수와 동일한 구문을 사용하여 배열 변수를 참조하고 배열의 첫 번째 요소를 참조하는 것과 Forward같습니다 . ${Forward[0]}따라서 awk 명령을 변경하지 않고 유지할 수 있습니다.

관련 정보