这些是我的档案
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的情况下将统一文件名传递给我的命令
发布于 2021-12-20 08:58:20
来自我上一个问题,这是
首先,让我们把它修好!不要做:
for i in $(anything); do只要做:
for i in *.fastq*.gz; do如何将统一文件名传递给我的命令
最重要的是,Shell与管道|一起工作。一个命令的输出与管道中的另一个命令类似,for循环的输出是uniq的输入。
读取uniq的输出。
for i in *.fastq*.gz; do echo "${i%_*}"; done |
uniq |
while IFS= read -r file; do stuff with "$file"; done使用shellcheck.net检查您的脚本。请参阅https://mywiki.wooledge.org/BashFAQ/001
作为一名生物学家,这对我来说是一件痛苦的事,请深入了解脚本的基本细节,我的简单解决方案是,如果我将它们作为两个集合运行的话
好的!我经常在交互式脚本编写时这样做。
tmp=$( for i in *.fastq*.gz; do echo "${i%_*}"; done )
tmp=$( uniq <<<"$tmp" ) # or tmp=$( echo "$tmp" | uniq )
tmp=$( echo "$tmp" | while IFS= read -r file; do stuff with "$file"; done )
echo "$tmp"请记住,qoutes "!<<<"stuff"的工作方式类似于<file --将"stuff"的内容输入到命令的输入中,与echo "$tmp" |一样。
https://stackoverflow.com/questions/70419345
复制相似问题