【发布时间】:2022-01-21 22:11:07
【问题描述】:
这些是我的文件
KIMS2021-01_R1.fastq.gz KIMS2021-05_R1.fastq.gz SRR1734376_1.fastq.gz SRR6006897_1.fastq.gz SRR6006901_1.fastq.gz SRR6006905_1.fastq.gz
KIMS2021-01_R2.fastq.gz KIMS2021-05_R2.fastq.gz SRR1734376_2.fastq.gz SRR6006897_2.fastq.gz SRR6006901_2.fastq.gz SRR6006905_2.fastq.gz
KIMS2021-02_R1.fastq.gz KIMS2021-06_R1.fastq.gz SRR1734377_1.fastq.gz SRR6006898_1.fastq.gz SRR6006902_1.fastq.gz SRR6006906_1.fastq.gz
KIMS2021-02_R2.fastq.gz KIMS2021-06_R2.fastq.gz SRR1734377_2.fastq.gz SRR6006898_2.fastq.gz SRR6006902_2.fastq.gz SRR6006906_2.fastq.gz
KIMS2021-03_R1.fastq.gz SRR1734374_1.fastq.gz SRR6006895_1.fastq.gz SRR6006899_1.fastq.gz SRR6006903_1.fastq.gz
KIMS2021-03_R2.fastq.gz SRR1734374_2.fastq.gz SRR6006895_2.fastq.gz SRR6006899_2.fastq.gz SRR6006903_2.fastq.gz
KIMS2021-04_R1.fastq.gz SRR1734375_1.fastq.gz SRR6006896_1.fastq.gz SRR6006900_1.fastq.gz SRR6006904_1.fastq.gz
KIMS2021-04_R2.fastq.gz SRR1734375_2.fastq.gz SRR6006896_2.fastq.gz SRR6006900_2.fastq.gz SRR6006904_2.fastq.gz
为了获得每对的统一文件名,我从上一个问题中得到了这个答案 这是这个
for i in $(echo *.fastq*.gz); do echo ${i%_*}; done | uniq
获得统一文件名后我想使用的最终命令
for i in $(ls *.fastq*.gz); do echo ${i%_*}; done | uniq; do STAR --runMode alignReads --outSAMtype BAM SortedByCoordinate --runThreadN 30 --genomeDir /run/media/punit/data3/Santosh_star_index --readFilesIn <(gunzip -c ${i}_R1.fastq.gz ${i}_R2.fastq.gz ) --outFileNamePrefix ${i%};done
现在我明白我不能在一个循环中使用do 两次
如何在不使用do 两次的情况下将统一文件名传递给我的命令
【问题讨论】:
-
我看不出使用
echo的意义。它不仅会创建一个不必要的子进程,如果您的文件名带有嵌入的空格,它甚至会产生错误的结果。你为什么不简单地做一个for i in *.fastq*.gz -
do STAR ...没有意义。那里没有语法错误吗? -
是的,这就是为什么问题..我必须使用文件名传递给对准器问题是由于不统一的文件名.如果它是像只有 SRR 这样的模式我很高兴去用命令
-
user1934428 在我之前的问题中,我得到了 echo 的建议,因为它比 ls 更安全
-
你不应该使用
ls是正确的,但是用另一个废话代替一个废话也没有帮助。对于echo和ls,您会遇到包含空格或换行符的文件名问题。所以不要这样做。