除了工程结构与实验的记录方式,工程的组织与文件统一命名方式同样很重要。
拆分工程为子工程
一旦你开始分析,你的工程里面将会充斥着大量的中间文件。将一个大任务拆分成子任务来创建子文件夹,是保持结构清晰的好方式。
统一的文件命名有助于自动化
举例说明,首先我们创建工程:
mkdir -p zmays-snp/{data/seqs,scripts,analysis}
注:“{}”用于参数展开,可以同时创建4个文件
接着我们创建一些命名风格统一的文件:
cd zmays-snp/data
touch seqs/zmays{A,B,C}_R{1,2}.fastq
ls seqs
# zmaysA_R1.fastq zmaysA_R2.fastq zmaysB_R1.fastq zmaysB_R2.fastq zmaysC_R1.fastq zmaysC_R2.fastq
通过通配符来匹配文件
ls seqs/zmaysB*
# seqs/zmaysB_R1.fastq seqs/zmaysB_R2.fastq
使用通配符的时候要谨慎,可以加上限制来保持精确:
ls seqs/zmaysB_R?.fastq
# seqs/zmaysB_R1.fastq seqs/zmaysB_R2.fastq
注:“*”为匹配任意长度字符的通配符;“?”号为匹配单个字符的通配符
选择性地匹配
通过“*”号是很模糊的匹配,如果我们只想要AB样本的fastq文件的话,可以使用"[]"限制只匹配括号内的字符:
ls seqs/zmays[AB]*.fastq
# seqs/zmaysA_R1.fastq seqs/zmaysA_R2.fastq seqs/zmaysB_R1.fastq seqs/zmaysB_R2.fastq
匹配内容很多的话也可以采用缩写:
ls snp_[C-G].txt
# snp_C.txt snp_D.txt snp_E.txt snp_F.txt snp_G.txt
值得注意的是"[]"只对一位字母或者一位数字(即[0-9])有效,而对多位的数字无效,例如:
ls snp_[10-13].txt
# snp_1.txt snp_3.txt
没有匹配到我们想要的文件,此时可以采用前面提到的"{}"符号:
ls snp_{10..13}.txt
# snp_10.txt snp_11.txt snp_12.txt snp_13.txt
PS:
最后补充一点,shell是按字母顺序而不是数字顺序排序的,1后面不是2而是10:
ls -l
# total 0
# drwxr-xr-x 1 way way 512 May 25 19:24 seqs
# -rw-r--r-- 1 way way 0 May 25 19:37 snp_1.txt
# -rw-r--r-- 1 way way 0 May 25 19:43 snp_10.txt
# -rw-r--r-- 1 way way 0 May 25 19:43 snp_11.txt
# -rw-r--r-- 1 way way 0 May 25 19:37 snp_2.txt
# -rw-r--r-- 1 way way 0 May 25 19:37 snp_3.txt
通过在数字编号前面补0可以有效地解决排序问题:
touch snp_00{1..9}.txt
touch snp_0{10..15}.txt
ls -l
-rw-r--r-- 1 way way 0 May 25 19:55 snp_001.txt
-rw-r--r-- 1 way way 0 May 25 19:55 snp_002.txt
-rw-r--r-- 1 way way 0 May 25 19:55 snp_003.txt
-rw-r--r-- 1 way way 0 May 25 19:55 snp_004.txt
-rw-r--r-- 1 way way 0 May 25 19:55 snp_005.txt
-rw-r--r-- 1 way way 0 May 25 19:55 snp_006.txt
-rw-r--r-- 1 way way 0 May 25 19:55 snp_007.txt
-rw-r--r-- 1 way way 0 May 25 19:55 snp_008.txt
-rw-r--r-- 1 way way 0 May 25 19:55 snp_009.txt
-rw-r--r-- 1 way way 0 May 25 19:55 snp_010.txt
-rw-r--r-- 1 way way 0 May 25 19:55 snp_011.txt
-rw-r--r-- 1 way way 0 May 25 19:55 snp_012.txt
-rw-r--r-- 1 way way 0 May 25 19:55 snp_013.txt
-rw-r--r-- 1 way way 0 May 25 19:55 snp_014.txt
-rw-r--r-- 1 way way 0 May 25 19:55 snp_015.txt