여러 파일의 결과를 기반으로 새 파일을 만들고 파일 이름을 첫 번째 열로 유지하려면 어떻게 해야 합니까?

여러 파일의 결과를 기반으로 새 파일을 만들고 파일 이름을 첫 번째 열로 유지하려면 어떻게 해야 합니까?

bam여러(바이너리 파일 형식) 파일에서 특정 줄을 추출 하고 싶습니다 . 다음을 사용하여 단일 파일에서 행을 선택할 수 있습니다 bam.

samtools view -c TCGA-BH-A0BW-11A.sorted.bam "5:13744354-13744380"
550

다음과 같은 100개의 파일이 있는 디렉토리가 있습니다 bam.

TCGA-AC-A2FB-11A.sorted.bam
TCGA-AC-A2FF-11A.sorted.bam
TCGA-AC-A2FM-11B.sorted.bam
TCGA-AC-A2QH-01A.sorted.bam
TCGA-AC-A2QJ-01A.sorted.bam
TCGA-BH-A0BW-11A.sorted.bam
TCGA-BH-A0BW-01A.sorted.bam
TCGA-CH-A0BW-11A.sorted.bam

해당 명령을 여러 파일에 적용하고 첫 번째 열은 확장자 없는 파일 이름으로, 두 번째 열은 해당 파일에 대한 명령의 결과 bam로 단일 파일에 출력을 저장하려면 어떻게 해야 합니까 ?samtools

예를 들어 다음과 같아야 합니다.

TCGA-BH-A0BW-11A     550
TCGA-BH-A0BW-01A     220
TCGA-CH-A0BW-11A     100

저는 Linux 시스템에서 작업하고 있습니다.

답변1

를 사용하는 경우 bash적절한 확장자를 가진 모든 파일을 반복하고 다음과 같이 처리할 수 있습니다.

for file in *.sorted.bam
do
    key="${file%.sorted.bam}"
    value="$(samtools view -c "$file" "5:13744354-13744380")"
    echo "$key $value"
done > output.txt

루프에서 우리는

  • .sorted.bam파일 이름 끝에서 제거하여 파일 키를 생성하고 이를 쉘 변수에 저장합니다 key.
  • 단일 파일 예제에 표시된 처리를 수행하고 출력을 셸 변수에 저장합니다.value
  • 키 및 값 인쇄

루프의 전체 출력을 파일로 리디렉션합니다 output.txt.

관련 정보