在生信處理流程中,從最初的fastq文件,經過分析處理后,會生成一堆的后續文件,如何在流程中合理的命名呢?
通常在批處理模式中,我們會得到多個樣本*.fastq(或*.fq、*.fastq.gz、*.fq.gz)路徑名文件sample.txt。如下所示:
/home/yhwang/sample/sampe01_R1.trimmed.fastq.gz /home/yhwang/sample/sample01_R2.trimmed.fastq.gz /home/yhwang/sample/sampe02_R1.trimmed.fastq.gz /home/yhwang/sample/sample02_R2.trimmed.fastq.gz /home/yhwang/sample/sampe03_R1.trimmed.fastq.gz /home/yhwang/sample/sample03_R2.trimmed.fastq.gz /home/yhwang/sample/sampe04_R1.trimmed.fastq.gz /home/yhwang/sample/sample04_R2.trimmed.fastq.gz /home/yhwang/sample/sampe05_R1.trimmed.fastq.gz /home/yhwang/sample/sample05_R2.trimmed.fastq.gz /home/yhwang/sample/sampe06_R1.trimmed.fastq.gz /home/yhwang/sample/sample06_R2.trimmed.fastq.gz /home/yhwang/sample/sampe07_R1.trimmed.fastq.gz /home/yhwang/sample/sample07_R2.trimmed.fastq.gz /home/yhwang/sample/sampe08_R1.trimmed.fastq.gz /home/yhwang/sample/sample08_R2.trimmed.fastq.gz
...
/home/yhwang/sample/sampen_R1.trimmed.fastq.gz /home/yhwang/sample/samplen_R2.trimmed.fastq.gz
上述,是一個多個雙端*.fastq全路徑文件sample.txt的內容,我們只需寫好一個樣本的分析流程,然后嵌套while循環,就可以實現批處理了。如何提取每行中的sample名稱呢?shell中提供了多種字符串截取的功能,如下所示:
# 對於每一行 [yhwang@yhwang ~]$ line='/home/yhwang/sample/sampe01_R1.trimmed.fastq.gz /home/yhwang/sample/sample01_R2.trimmed.fastq.gz'
# 獲取sample名稱
[yhwang@yhwang ~]$ sample=`basename ${line%%_*}`
[yhwang@yhwang ~]$ echo $sample
sample0
按指定的字符串截取
(1)第一種方法:
從左向右截取最后一個string后的字符串
${varible##*string}
從左向右截取第一個string后的字符串
${varible#*string}
從右向左截取最后一個string后的字符串
${varible%%string*}
從右向左截取第一個string后的字符串
${varible%string*}
“*”只是一個通配符可以不要
[yhwang@yhwang ~]$ variable="IP:180.97.33.107,port:80"
[yhwang@yhwang ~]$ echo "1:"${variable##*.}
1:107,port:80
[yhwang@yhwang ~]$ echo "2:"${variable#*.}
2:97.33.107,port:80
[yhwang@yhwang ~]$ echo "3:"${variable%%.*}
3:IP:180
[yhwang@yhwang ~]$ echo "4:"${variable%.*}
4:IP:180.97.3
(2)第二種方法:
${varible:n1:n2}:截取變量varible從n1開始的n2個字符,組成一個子字符串。可以根據特定字符偏移和長度,使用另一種形式的變量擴展,來選擇特定子字符串。
[yhwang@yhwang ~]$ echo "5:"${variable:3:13}
5:180.97.33.107
參考資料