A1부터 A16까지의 이름을 가진 16개의 개별 폴더가 있고 각 폴더에는aligned.sorted.bam
aligned.sorted.bam
이 명령을 사용하여 다음으로 변환하고 싶습니다 .aligned.sam
module load samtools/1.3.2
samtools view -h -o aligned.sam aligned.sorted.bam
aligned.sam
그런 다음 으로 변환counts.txt
module load htseq/0.6.1
htseq-count --stranded=no -q aligned.sam /local/software/DropSeq/STAR_Genomes/STAR_hg38_Genome/metadata/Homo_sapiens.GRCh38.dna.primary_assembly.gtf > counts.txt
각 폴더를 반복하여 이러한 명령을 단계별로 실행할 수 있는 스크립트가 있습니까? 내 리눅스는 너무 나빠
어떤 도움을 주셔서 감사합니다
@cas로 이 스크립트 작성을 도와주세요.
#!/bin/sh
find /temp/hgig/fi1d18/bin/TruSeq300719-139385266/FASTQ_Generation_2019-08-03_04_28_02Z-190932857/335T/ -type f -name aligned.sorted.bam -print0 | \
xargs -0r -n 1 -P 8 /temp/hgig/fi1d18/bin/TruSeq300719-139385266/FASTQ_Generation_2019-08-03_04_28_02Z-190932857/script.sh
cd "$(/temp/hgig/fi1d18/bin/TruSeq300719-139385266/FASTQ_Generation_2019-08-03_04_28_02Z-190932857/335T/ "$1")"
module load samtools/1.3.2
samtools view -h -o aligned1.sam "$1"
module load htseq/0.6.1
htseq-count --stranded=no -q aligned1.sam /local/software/DropSeq/STAR_Genomes/STAR_hg38_Genome/metadata/Homo_sapiens.GRCh38.dna.primary_assembly.gtf > counts.txt
그런 다음 터미널에 다음을 입력합니다.
chmod +x script.sh
하지만 아무 일도 일어나지 않았어
죄송합니다. 최근 변경 사항으로 script.sh를 실행 가능하게 만든 다음 이 명령을 실행했습니다.
[fi1d18@cyan01 FASTQ_Generation_2019-08-03_04_28_02Z-190932857]$ find 353T -type f -name aligned.sorted.bam -print0 | \ xargs -0r -n 1 -P 8 script.sh
-bash: xargs: command not found
[fi1d18@cyan01 FASTQ_Generation_2019-08-03_04_28_02Z-190932857]$ find T{}/ -type f -name aligned.sorted.bam -print0 | \ xargs -0r -n 1 -P 8 script.sh
-bash: xargs: command not found
find: `T{}/': No such file or directory
[fi1d18@cyan01 FASTQ_Generation_2019-08-03_04_28_02Z-190932857]$ find T{} -type f -name aligned.sorted.bam -print0 | \ xargs -0r -n 1 -P 8 script.sh
-bash: xargs: command not found
find: `T{}': No such file or directory
[fi1d18@cyan01 FASTQ_Generation_2019-08-03_04_28_02Z-190932857]$ find T -type f -name aligned.sorted.bam -print0 | \ xargs -0r -n 1 -P 8 script.sh
-bash: xargs: command not found
find: `T': No such file or directory
[fi1d18@cyan01 FASTQ_Generation_2019-08-03_04_28_02Z-190932857]$
[fi1d18@cyan01 FASTQ_Generation_2019-08-03_04_28_02Z-190932857]$ ls
305N 305T 310N 310T 324T 327T 335T 337N 337T 338T 344T 346T 349T 353B 353N 353T script.sh
[fi1d18@cyan01 FASTQ_Generation_2019-08-03_04_28_02Z-190932857]$
난 ~를 지웠어 \
[fi1d18@cyan01 FASTQ_Generation_2019-08-03_04_28_02Z-190932857]$ find T -type f -name aligned.sorted.bam -print0 | xargs -0r -n 1 -P 8 script.sh
find: `T': No such file or directory
[fi1d18@cyan01 FASTQ_Generation_2019-08-03_04_28_02Z-190932857]$ ls
305N 305T 310N 310T 324T 327T 335T 337N 337T 338T 344T 346T 349T 353B 353N 353T script.sh
[fi1d18@cyan01 FASTQ_Generation_2019-08-03_04_28_02Z-190932857]$
@cas의 최신 추천을 바탕으로 함
[fi1d18@cyan01 FASTQ_Generation_2019-08-03_04_28_02Z-190932857]$ find . -type f -name aligned.sorted.bam -print0 | xargs -0r -n 1 -P 8 script.sh
xargs: script.sh: Text file busy
xargs: script.shxargs: : Text file busyscript.sh
: Text file busy
xargs: script.sh: Text file busy
xargs: script.sh: Text file busy
xargs: script.shxargs: : Text file busyscript.sh
: Text file busy
[fi1d18@cyan01 FASTQ_Generation_2019-08-03_04_28_02Z-190932857]$
답변1
대략적으로 추측하면 다음과 같은 내용이 작동할 수 있습니다.
find ./A{1..16}/ -type f -name aligned.sorted.bam -print0 |
xargs -0r -n 1 -P 8 ./myscript.sh
이것은 여러 인스턴스를 병렬로 실행합니다 myscript.sh
( -P 8
한 번에 8개. CPU 코어/스레드 수가 더 많거나 적은 경우 조정합니다. 내 스레드리퍼에서는 -P 32
.을 사용하거나 -P 0
가능한 한 많은 인스턴스를 실행하는 데 사용합니다). 각 인스턴스에 파일 이름 인수가 제공됩니다. 스크립트의.
myscript.sh
다음과 같이 보일 것입니다:
#!/bin/sh
cd "$(dirname "$1")"
module load samtools/1.3.2
samtools view -h -o aligned.sam "$1"
module load htseq/0.6.1
htseq-count --stranded=no -q aligned.sam /local/software/DropSeq/STAR_Genomes/STAR_hg38_Genome/metadata/Homo_sapiens.GRCh38.dna.primary_assembly.gtf > counts.txt
이 명령은 전달되어야 합니다 chmod +x myscript.sh
. 위 명령에서는 xargs
해당 명령이 현재 디렉터리에 있다고 가정합니다. PATH 어딘가에 배치하고( ~/bin/
자신의 스크립트를 위한 좋은 위치, $PATH 에 추가하기만 하면 됨 ) 대신 ~/.bashrc
실행할 수 있습니다 .myscript.sh
./myscript.sh
나는 그것이 무엇을 의미하는지 모르기 module load ...
때문에 대답의 이 부분이 틀렸을 수도 있습니다. 필요한 경우 스크립트를 수정할 수 있도록 실행하려는 항목을 알고 있다고 가정합니다.samtools
htseq-count
myscript.sh
ps: 파일을 작성하지 않는 매우 간단한 테스트를 사용하는 것이 좋습니다 .
예를 들어 다음과 같습니다.
#!/bin/sh
cd "$(dirname "$1")"
echo process-id $$ is in $(pwd), processing file "$1"