這些是我的檔案
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兩次的情況下將統一檔案名傳遞給我的命令
uj5u.com熱心網友回復:
來自我之前的問題,這是
首先,讓我們修復它!不要做:
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://www.uj5u.com/ruanti/387303.html
上一篇:Kestel(.NETCore3.1)是否支持md5RSA證書?
下一篇:如何使用C語言將 添加為字串?
