對于為什么這個回圈未能按照我需要的方式連接檔案,我束手無策。基本上,假設我們有以下檔案:
AB124661.lane3.R1.fastq.gz
AB124661.lane4.R1.fastq.gz
AB124661.lane3.R2.fastq.gz
AB124661.lane4.R2.fastq.gz
我們想要的是:
cat AB124661.lane3.R1.fastq.gz AB124661.lane4.R1.fastq.gz > AB124661.R1.fastq.gz
cat AB124661.lane3.R2.fastq.gz AB124661.lane4.R2.fastq.gz > AB124661.R2.fastq.gz
我嘗試過的(但沒有奏效):
- 創建檔案名 (AB124661) 并將其保存到 ID 檔案:
ls -1 R1 .gz | awk -F '.' '{列印 $1}' | 排序 | 唯一 > 標識
這將創建一個存盤樣本/檔案名稱的 ID 檔案。
- 運行以下回圈:
for i in `cat ./ID`; do cat $i\.lane3.R1.fastq.gz $i\.lane4.R1.fastq.gz \> out/$i\.R1.fastq.gz; done for i in `cat ./ID`; do cat $i\.lane3.R2.fastq.gz $i\.lane4.R2.fastq.gz \> out/$i\.R2.fastq.gz; done
回圈失敗并連接成空檔案。
我嘗試過的事情:
- 是的,ID檔案肯定在檔案夾里
- 當我使用 echo 運行時,它顯示 cat 命令正確
任何幫助將不勝感激,
最好的,
交流電
uj5u.com熱心網友回復:
- 你為什么要逃避
\>?這將導致 acat: '>': No such file or directory而不是重定向。 - 不要閱讀與
for
while IFS= read -r id; do
cat "${id}.lane3.R1.fastq.gz" "${id}.lane4.R1.fastq.gz" > "out/${id}.R1.fastq.gz"
cat "${id}.lane3.R2.fastq.gz" "${id}.lane4.R2.fastq.gz" > "out/${id}.R2.fastq.gz"
done < ./ID
uj5u.com熱心網友回復:
假設您將 id 存盤在檔案 ./ID 每行
while read -r line; do
cat "$line".lane3.R1.fastq.gz "$line".lane4.R1.fastq.gz > "$line".R1.fastq.gz
cat "$line".lane3.R2.fastq.gz "$line".lane4.R2.fastq.gz > "$line".R2.fastq.gz
done < ./ID
uj5u.com熱心網友回復:
純 shell 解決方案可能是這樣的:
for file in *.fastq.gz; do
id=${file%%.*}
[ -e "$id".R1.fastq.gz ] || cat "$id".*.R1.fastq.gz > "$id".R1.fastq.gz
[ -e "$id".R2.fastq.gz ] || cat "$id".*.R2.fastq.gz > "$id".R2.fastq.gz
done
或者:
printf '%s\n' *.fastq.gz | cut -d. -f1 | sort -u |
while IFS= read -r id; do
cat "$id".*.R1.fastq.gz > "$id".R1.fastq.gz
cat "$id".*.R2.fastq.gz > "$id".R2.fastq.gz
done
此解決方案假定感興趣的檔案名不包含換行符。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/521142.html
標籤:重击壳for循环级联
下一篇:如何在bash腳本中傳遞附加引數
