다섯 번째 필드의 값에 따라 다른 작은 파일로 파일을 분할하려고합니다. 이 작업을 수행하는 가장 좋은 방법은 already suggested 및 also here입니다.
그러나 저는 이것을 qsub 용 .sh 스크립트에 통합하려고하는데 많은 성공을 거두지 못했습니다.
문제는 파일이 라인이 지정하는 출력 섹션,
즉, f = "Alignments_" $5 ".sam" print > f
에, 나는 디렉토리를 지정 이전 스크립트에서 선언 된 변수를 전달할 필요가있다 여기서 파일을 작성해야합니다. 여러 파일에 대한 배열 작업을 보낼 때 각 작업에 대해 빌드 된 변수를 사용하여이 작업을 수행해야합니다.
그래서 내가f = $output_path "/Alignments_" $5 ".sam" print > f
같은 것을 작성해야하지만 AWK에 속하는 $ 필드가 아닌 $ 변수를 가지고 좋아하지 않는 것 $output_path
= ./Sample1
말한다. 나는 $ 5 전후에 두 개의 "문자열"을 갖는 것을 좋아한다고 생각조차하지 않습니다.
내가 되돌아 오는 오류는 파일의 첫 번째 줄 (little.sam
)을 잘라내어 f
과 같이 이름을 지정하고 그 뒤에/Alignments_ "$ 5".sam "(올바르게 마지막 세 줄을 넣음)). 그것은 너무 큰 이름이다, 자연스럽게 말한다.
을 내가 AWK에게 -V를 추가 한 후이 그래서?
감사합니다!
awk -F '[:\t]' ' # read the list of numbers in Tile_Number_List
FNR == NR {
num[$1]
next
}
# process each line of the .BAM file
# any lines with an "unknown" $5 will be ignored
$5 in num {
f = "Alignments_" $5 ".sam" print > f
} ' Tile_Number_List.txt little.sam
UPDATE를 작동 쓸 수있는 방법 변형 문자 선언하기 LE OPATH는
input=$1
outputBase=${input%.bam}
mkdir -v $outputBase\_TEST
newdir=$outputBase\_TEST
samtools view -h $input | awk 'NR >= 18' | awk -F '[\t:]' -v opath="$newdir" '
FNR == NR {
num[$1]
next
}
$5 in num {
f = newdir"/Alignments_"$5".sam";
print > f
} ' Tile_Number_List.txt -
mkdir: created directory little_TEST'
awk: cmd. line:10: (FILENAME=- FNR=1) fatal: can't redirect to `/Alignments_1101.sam' (Permission denied)
시도'추가 ;''$ 5 ".sam"'다음에 또는'print> f'를 새로운 행에 넣습니다. – Kent
따옴표로 묶지 않은 변수를 사용할 때 발생하는 파일 이름 globbing, 와일드 카드 확장 등의주의 사항 및 결과를 완전히 알지 못하는 특별한 이유가없는 한 항상 쉘 변수를 인용하십시오. 또한'$ outputBase \ _TEST'에서'\ _'을 (를) 의도 한 것은 무엇입니까? 아마도 당신은''$ {outputBase}/_ TEST ''를 쓰려고 노력하고있을 것입니다. 그러나 그것은 명확하지 않습니다. –