입력

2016-10-12 2 views
0

같은 프로그램에 파일 이름 접두사를 전달 나는 다음과 같은 이름을 가진 일부 파일이 있습니다. .bam 확장자가있는 모든 파일에서 밑줄 (예 : A-C-F3, A-VR-M6R 등) 앞의 문자열을 추출하고 싶습니다.입력

그런 다음 입력을 위해 *_accepted_hits.bam 파일을 사용할 다른 프로그램에서 생성 된 출력 파일의 접두어로이 문자열을 사용하고 싶습니다.

더 구체적으로, 내 입력은 다음과 같다 : 여기

samtools sort -n A-C-F3_accepted_hits.bam A-C-F3_sorted 
samtools sort -n A-VR-M6R_accepted_hits.bam A-VR-M6R_sorted 

가 samtools은 A-C-F3_accepted_hits.bam의 내용을 정렬합니다. 접두사 A-C-F3_sorted가 붙은 출력 파일을 기본 확장자로 사용하고 싶습니다. 마찬가지로 나는이 작업을 수행하고자하는 17 개의 파일을 가지고있다. 희망은 이것들을 명확하게 만든다. 감사합니다. .

+0

궁금한 이유 2 porgrams? –

+0

@kkk RNA 시퀀싱 데이터 분석의 파이프 라인에 필요한 samtools라는 특정 프로그램을 사용해야합니다. 이 프로그램의 경우 원시 데이터 파일은 위에서 언급 한 .bam 파일입니다. 출력 파일의 이름을 같은 접두어로 지정하고 싶으면 기본값을 사용하여 이전 출력 파일을 덮어 씁니다. – SumitPaliwal

답변

0

awk을 사용하면 filename 접두사를 추출하여 filename의 공통 부분에 추가 할 수 있습니다.

OCOMM=_accepted_hits.bam 
for i in `ls *.bam`; 
    do 
      OFILE=`echo $i | awk -F_ '{print $1}'`; 
      FILENAME=$OFILE$OCOMM; 
      echo $FILENAME; 
    done 
+0

더 명확하게하기 위해 질문의 마지막 부분에 일부 텍스트를 추가했습니다. 그에 따라 제안을 친절하게 제공 할 수 있습니까? 감사 – SumitPaliwal

0

다음 Bash 스크립트는 .*_accepted_hits.bam 패턴과 일치하는 파일에서 명령 줄 인수 문자열을 작성한 다음이 인수를 사용하여 php /tmp/test.php을 실행합니다.

#!/bin/bash - 

args="" 
while read name 
do 
    name=$(basename "$name") 
    args="$args $(builtin printf ' --input=%q' "${name%%_*}")" 
done < <(find -type f -regex '.*_accepted_hits.bam') 
eval "php /tmp/test.php $args" 

/tmp/test.php

<?php 
$o = getopt('i:', ['input:']); 
var_dump($o); 

샘플 파일

A-C-F3_accepted_hits.bam 
A-VR-M6R_accepted_hits.bam 
X Y Z_accepted_hits.bam 

샘플 출력

array(1) { 
    ["input"]=> 
    array(3) { 
    [0]=> 
    string(6) "A-C-F3" 
    [1]=> 
    string(5) "X Y Z" 
    [2]=> 
    string(8) "A-VR-M6R" 
    } 
} 

참고 : eval은 일반적으로 악성 코드를 평가할 가능성이 있으므로 안전하지 않은 것으로 간주됩니다 (특히 파일 이름에 삽입 될 수 있음). 또한 특수 쉘 문자를 이스케이프하는 내장 printf (info bash printf 참조) 기능을 사용하십시오.

0

해결책을 얻었습니다. 다음과 같습니다 :

for sample in A*_accepted_hits.bam 
    do 
     echo $sample 
     prefix=$(echo ${sample} | awk -F_ '{print $1}') 
     echo $prefix 
     samtools sort -n ${prefix}_accepted_hits.bam ./tophat_sorted/${prefix}_sorted 
    done