【发布时间】:2022-01-21 19:57:51
【问题描述】:
我有文件列表,其中每个文件有两组文件正向和反向。
KIMS2021-01_R1.fastq.gz KIMS2021-05_R2.fastq.gz SRR1734377_1.fastq.gz SRR6006898_2.fastq.gz SRR6006903_1.fastq.gz
KIMS2021-01_R2.fastq.gz KIMS2021-06_R1.fastq.gz SRR1734377_2.fastq.gz SRR6006899_1.fastq.gz SRR6006903_2.fastq.gz
KIMS2021-02_R1.fastq.gz KIMS2021-06_R2.fastq.gz SRR6006895_1.fastq.gz SRR6006899_2.fastq.gz SRR6006904_1.fastq.gz
KIMS2021-02_R2.fastq.gz SRR1734374_1.fastq.gz SRR6006895_2.fastq.gz SRR6006900_1.fastq.gz SRR6006904_2.fastq.gz
KIMS2021-03_R1.fastq.gz SRR1734374_2.fastq.gz SRR6006896_1.fastq.gz SRR6006900_2.fastq.gz SRR6006905_1.fastq.gz
KIMS2021-03_R2.fastq.gz SRR1734375_1.fastq.gz SRR6006896_2.fastq.gz SRR6006901_1.fastq.gz SRR6006905_2.fastq.gz
KIMS2021-04_R1.fastq.gz SRR1734375_2.fastq.gz SRR6006897_1.fastq.gz SRR6006901_2.fastq.gz SRR6006906_1.fastq.gz
KIMS2021-04_R2.fastq.gz SRR1734376_1.fastq.gz SRR6006897_2.fastq.gz SRR6006902_1.fastq.gz SRR6006906_2.fastq.gz
KIMS2021-05_R1.fastq.gz SRR1734376_2.fastq.gz SRR6006898_1.fastq.gz SRR6006902_2.fastq.gz
我的目标是将这些文件传递给输入,当所有文件都具有相似的命名模式时,这很简单,我有来自两个不同来源的数据..
这是我运行的命令
for i in $(ls *.fastq*.gz | sed 's/00[0-9]\.gz/.gz/' | rev | cut -c 17- | rev | uniq); do STAR --runMode alignReads --outSAMtype BAM SortedByCoordinate --runThreadN 30 --genomeDir /run/media/punit/data3/Santosh_star_index --readFilesIn <(gunzip -c ${i}_R1_001.fastq.gz ${i}_R2_001.fastq.gz ) --outFileNamePrefix ${i%};done
我的想法是我应该为每个集合获取一个文件名。
此命令适用于以 SRR id 开头的文件,正如我所尝试的那样
for i in $(ls *.fastq*.gz | sed 's/00[0-9]\.gz/.gz/' | rev | cut -c 12- | rev | uniq); do echo $i; done
上面的输出是这样的
KIMS2021-01_
KIMS2021-02_
KIMS2021-03_
KIMS2021-04_
KIMS2021-05_
KIMS2021-06_
SRR1734374
SRR1734375
SRR1734376
SRR1734377
SRR6006895
SRR6006896
SRR6006897
SRR6006898
SRR6006899
SRR6006900
SRR6006901
SRR6006902
SRR6006903
SRR6006904
SRR6006905
在这里我可以看到 SRR id 变得独一无二,而 KIIMS 不是。 所以任何建议或帮助我如何使它们类似的模式运行一次。
天真的方法是将它们作为两个不同的集合运行,而不是一个,但我想学习当有不同种类或不同长度的命名时如何做
更新
此代码执行我想要的统一名称
for i in $(echo *.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_001.fastq.gz ${i}_R2_001.fastq.gz ) --outFileNamePrefix ${i%};done
现在我的问题是我有 2 个 do 不起作用,但我如何将名称通过管道传递给命令
【问题讨论】:
-
您需要从文件名中删除最后一个
_及其后面的所有内容。这可以通过${i%_*}来实现。 -
愚蠢的问题我将如何实现仅重命名所有文件名?
-
顺便说一句,这是useless use of
ls -
使用
printf代替ls并没有更复杂,更简单,更不容易出错。一般来说,never uselsin scripts.,正是因为所有的并发症。 -
我不完全确定您的问题到底是什么;如果副本没有回答您的问题,也许可以尝试将edit 这变成一个更清晰、更集中的问题。如果你这样做了,请随时像 @tripleee 一样在此处联系我以重新打开它。