fasta/fq文件處理萬能工具——Seqkit學(xué)習(xí)記錄

shenwei爪哥開發(fā)的處理Fasta/Fastq文件的萬能工具。之前處理fq/fa文件時(shí)花時(shí)間寫的一些腳本發(fā)現(xiàn)在seqkit里直接能一行命令就解決。實(shí)在是提升效率,整合流程中十分好的工具。本文是對(duì)Seqkit官方介紹(https://bioinf.shenwei.me/seqkit/usage/)的學(xué)習(xí),參考學(xué)習(xí)的過程中可以對(duì)照著官方文檔中的例子進(jìn)行操作學(xué)習(xí)。
熟練的運(yùn)用關(guān)鍵還是需要多練習(xí),搭建分析流程時(shí)多多回顧記得使用此工具。

序列和子序列(Sequence and subsequence)

1. seq 序列操作
  • -p, -r 反向互補(bǔ)序列
  • -w 指定輸出每列的序列長(zhǎng)度。例如-w 0即為一行格式序列輸出。
  • -n 輸出序列的名字
  • -m 500 過濾序列長(zhǎng)度小于500的序列
  • -n , -i 輸出序列名字id
  • -i --id-regexp 根據(jù)正則匹配對(duì)序列名稱進(jìn)行操作(僅匹配正則匹配括號(hào)里的)。
>cel-mir-1 MI0000003 Caenorhabditis elegans miR-1 stem-loop
ATAAGCGCGCGCGCG

seqkit seq hairpin.fa.gz -i --id-regexp "^[^\s]+\s([^\s]+)\s"
2. subseq根據(jù)區(qū)域/gtf/bed文件提取序列,以1為開始。
  • -r 1:12 取每條序列的前12bp
  • --gtf a.gtf b.fas 根據(jù)gtf文件提取序列
  • --gtf --feature cds -u 1000提取cds序列以及上游1000bp啟動(dòng)子區(qū)序列。
  • --gtf a.gtf -u 1000 -f根據(jù)gtf文件僅選取上游1000bp的啟動(dòng)子序列。
seqkit subseq --gtf t.gtf t.fa -u 3 -f
3. sliding根據(jù)滑窗取序列
4. stats對(duì)序列fa/fq文件進(jìn)行基本統(tǒng)計(jì)
  • -a *.fq.gz包括所有的統(tǒng)計(jì)信息
  • -T 輸出\t分割的文件,可接下來進(jìn)行管道操作
##接管道csvtk進(jìn)行操作
seqkit stats *.f{a,q}.gz -T | csvtk pretty -t

## 轉(zhuǎn)為markdown文件格式
seqkit stats *.f{a,q}.gz -T | csvtk csv2md -t 
5. faidx創(chuàng)建類似于samtools faidx的index文件。

可用于提取某一序列的指定區(qū)域序列,并且可以根據(jù)正則匹配來匹配序列姓名

##提取某一序列20~30bp區(qū)域的序列。 
seqkit faidx tests/hairpin.fa hsa-let-7a-1:20-30


格式的轉(zhuǎn)換(Format conversion)

1. fq2fa如其名,fastq文件轉(zhuǎn)換為fasta文件
2. fx2tab 將每條序列fa/fq轉(zhuǎn)換為tab分割的一行格式,也可輸出每條序列的一些基本信息。
  • -n 只輸出name行(去序列及質(zhì)量),-i輸出name行起使的id名
  • -l 輸出序列的長(zhǎng)度,-g 輸出gc含量
  • -H 輸出文件的header表頭
  • 管道接csvtk可以接 csvtk inter多個(gè)文件中的相同序列,csvtk join
## 根據(jù)序列長(zhǎng)度排序,也可seqkit sort -l

$ zcat hairpin.fa.gz | seqkit fx2tab -l | sort -t"`echo -e '\t'`" -n -k4,4 | seqkit tab2fx
>cin-mir-4129 MI0015684 Ciona intestinalis miR-4129 stem-loop
UUCGUUAUUGGAAGACCUUAGUCCGUUAAUAAAGGCAUC
>mmu-mir-7228 MI0023723 Mus musculus miR-7228 stem-loop
UGGCGACCUGAACAGAUGUCGCAGUGUUCGGUCUCCAGU
3. convert FASTQ的質(zhì)量值的轉(zhuǎn)換。
4. translate 翻譯DNA/RNA序列為amino acid序列。
  • --trim去除翻譯終止密碼子的*
  • -T 不同的國(guó)際翻譯規(guī)則,有31種規(guī)則。
  • -f , --frame -3~3 不同的翻譯框。
  • -l 1顯示標(biāo)準(zhǔn)密碼子翻譯表。AAA->K... -L 1顯示ambiguous模式,包含一些簡(jiǎn)并堿基的翻譯。

序列的搜索和定位(Searching:grep and locate)

1. grep 根據(jù)id名(可正則匹配)or特定的序列模式(motifs)來 搜索/提取序列。
  • -n 根據(jù)序列全名來提取序列。
  • -p -r 根據(jù)一定的正則匹配pattern來提取序列。
  • -v反向提取序列,即去除匹配的序列。
  • -f 根據(jù)id list來批量提取序列,很好用。
  • -s -p atcgatcg 根據(jù)某段序列motif來提取序列。
  • -d 支持簡(jiǎn)并堿基模式。
  • -R 1:30 只對(duì)1~30位的序列進(jìn)行匹配。
$ zcat hairpin.fa.gz | seqkit grep -r -p ^hsa
>hsa-let-7a-1 MI0000060 Homo sapiens let-7a-1 stem-loop
UGGGAUGAGGUAGUAGGUUGUAUAGUUUUAGGGUCACACCCACCACUGGGAGAUAACUAU
ACAAUCUACUGUCUUUCCUA

## 對(duì)hmmsearch結(jié)果進(jìn)行整理,提取其中的id,并獲得擬南芥中HDZIP3的cds序列,其中利用 -f -
grep -v "#" ath.out |cut -d '|' -f 1 |seqkit grep -r -f - Ath_cds.fas.gz

### 根據(jù)small.fq文件中的id名來掉出big.fq.gz文件中的序列
seqkit grep -f <(seqkit seq -n -i small.fq.gz) big.fq.gz


##Extract sequences starting with AGGCG
seqkit grep -s -r -i -p ^aggcg hairpin.fa

##根據(jù)簡(jiǎn)并堿基來提取序列
seqkit grep -s -d -i -p TTSAA
seqkit grep -s -r -i -p TT[CG]AA
2. locate 定位并返回短序列(motifs)的具體位置(location),支持簡(jiǎn)并堿基/正則匹配。
  • --bed輸出bed6格式,--gtf輸出gtf格式文件;
  • -p 具體搜尋的motif序列。
  • -d 支持簡(jiǎn)并堿基。-i -d -p AWDTTT
  • -P 僅搜尋正義鏈。
  • -m 1 允許mismatch。
  • -f 輸入motif序列的fasta文件進(jìn)行批量定位。
## 輸出每條序列種含有的ORF序列 和 具體位置(正則匹配)
zcat hairpin.fa.gz | seqkit locate -i -p "A[TU]G(?:.{3})+?[TU](?:AG|AA|GA)"

### 定位motif的具體位置(簡(jiǎn)并堿基的使用)。ChIP-seq里會(huì)用到。
zcat hairpin.fa.gz | seqkit locate -i -d -p AUGGACUN


序列的集合運(yùn)算操作(set operations)

1. duplicate 對(duì)序列復(fù)制重復(fù)-n
## 取序列進(jìn)行重復(fù)2次,并進(jìn)行重新命名
cat hairpin.fa | seqkit head -n 1 | seqkit duplicate -n 2 | seqkit rename

2. rmdup一個(gè)文件內(nèi)根據(jù)id/name/seq來去除重復(fù)序列。
  • -s 根據(jù)相同的序列來去除重復(fù)
  • -n 根據(jù)相同的姓名去除重復(fù)
  • -d file.fas 保存重復(fù)的序列。
  • -D file_detail.txt 重復(fù)序列的一些基本信息。
3. common多個(gè)文件中根據(jù)id/name/seq來找相同的序列。(如果只是兩個(gè)文件,僅用seqkit grep可快速實(shí)現(xiàn))
  • -n 根據(jù)相同的全名name,取共同的序列
  • -s 根據(jù)相同的序列來提取。
  • -i ignore case
  • --md5 處理大文件時(shí)根據(jù)md5值
#####輸出ID名字相同的:
seqkit common test1.fa test2.fa -o common.fasta
#####輸出序列名字相同的:
seqkit common test1.fa test2.fa  -n -o common.fasta
#####輸出要比較的文件中序列相同的序列:
seqkit common test1.fa test2.fa -s -i -o common.fasta

4. split 對(duì)fa文件根據(jù)name/id/subseq/區(qū)域進(jìn)行分割/split2支持fq文件,更小內(nèi)存,更快速度。
  • -s 10000 分割出每10000條seq一個(gè)子文件。
  • -p 4 分割出4個(gè)子文件。--two-pass減少內(nèi)存
  • -f force,強(qiáng)制分割。
  • -i 根據(jù)id分割文件。
  • -r 1:3 根據(jù)seq的前3位序列進(jìn)行分割。
  • -1 -2 split2對(duì)fastq文件分割操作
5. sample 隨機(jī)取一定數(shù)量n或比例的序列。
  • -n 100 隨機(jī)約位100個(gè)子序列。
  • -p 0.1 取大約為10%的子序列。
  • -s 設(shè)置隨機(jī)種子。
6. head 取前-n個(gè)fq/fa子序列; range 取指定范圍-r -10:-1的序列

Fastq/Fasta的編輯修改(Edit)

1. replace 可根據(jù)正則對(duì)name/seq進(jìn)行修改。
  • -s 對(duì)序列進(jìn)行更改。默認(rèn)是對(duì)名字name進(jìn)行修改
  • -p 要匹配的正則pattern "\s.*"。
  • -r 要替換成的pattern。 用單引號(hào)''。支持捕獲式匹配capture matching '$1'
  • -k 哈希表類似的key-value對(duì)應(yīng)表文件tsv文件。需要用到-r {kv} --keep key 如果沒有對(duì)應(yīng)的key-value對(duì)應(yīng),則保留原來的名字key不做修改。
###1. 去除id空格\s后的內(nèi)容
$ echo -e ">seq1 abc-123\nACGT-ACGT" | seqkit replace -p " .+"
>seq1
ACGT-ACGT

###2. 修改id中的-改為=
$ echo -e ">seq1 abc-123\nACGT-ACGT" | seqkit replace -p "\-" -r '='
>seq1 abc=123
ACGT-ACGT

####3. 在每個(gè)字符后加空格,(capture matching)
echo -e ">seq1 abc-123\nACGT-ACGT" | seqkit replace -p "(.)" -r '$1 ' -s

#### 4. 將每個(gè)序列名字改位seq_1,seq_2,利用{nr}
echo -e ">abc\nACTG\n>123\nATTT" |  seqkit replace -p ".+" -r "seq_{nr}" --nr-width 5

#### 5. 根據(jù)已知的key-value的對(duì)應(yīng)表文件來修改姓名。
seqkit replace -p ' (.+)$' -r ' {kv}' -k alias.txt test.fa --keep-key

2. rename 對(duì)姓名重復(fù)的id名進(jìn)行修改。
3. restart start position for circular genome.
4. concat 根據(jù)相同的id名連接序列。
###連接序列的前兩位bp和后兩位bp
seqkit concat <(seqkit subseq -r 1:2 t.fa) <(seqkit subseq -r -2:-1 t.fa)
5. mutate 對(duì)每條序列的特定位置進(jìn)行突變,包括point mutation, insertion, deletion。
  • -p 1:X 對(duì)每條序列的第一位bp編輯改為X。(位置為1-base)
  • -d 1:2 對(duì)每一條序列的前兩位進(jìn)行刪除。
  • -i 0:xx 對(duì)每條序列的第0位之后插入xx,即在每條序列之間插入xx
  • -s chr1,chr2僅對(duì)chr1,chr2兩條序列進(jìn)行編輯。
  • -r -s chr支持正則匹配所有chr的進(jìn)行編輯
  • -s chr1,chr2 -v 反向匹配chr1,chr2
###對(duì)每條序列的多個(gè)位點(diǎn)進(jìn)行點(diǎn)突變
echo -ne ">1\nACTGNactgn\n>2\nactgnACTGN\n" | seqkit mutate -p 1:x -p -1:x --quiet

### 對(duì)每條序列的最后3位進(jìn)行刪除
echo -ne ">1\nACTGNactgn\n>2\nactgnACTGN\n" | seqkit mutate -d -3:-1 --quiet

### 僅對(duì)chr1,chr2兩條序列進(jìn)行編輯
cat tests/hsa.fa | seqkit mutate -p -1:X -s chr1,chr2


排序(ordering)

1. shuffle 對(duì)fasta文件序列隨機(jī)重排。
2. sort 根據(jù)id/name/sequence/length重新對(duì)序列進(jìn)行排序。
  • -n 按照全名進(jìn)行排序
  • -N, --natural-order 按照數(shù)字——字母的方式進(jìn)行排序。
  • -i 忽略大小寫。
  • -l 根據(jù)序列長(zhǎng)度進(jìn)行排序。
  • -s 根據(jù)序列進(jìn)行排序。
  • -r 反向輸出結(jié)果。
  • -2, --two-pass 減少內(nèi)存使用。
  • --quiet 不輸出中間信息。
### 根據(jù)數(shù)字——字母的方式進(jìn)行排序
echo -e ">3\na\n>1\na\n>Y\na\n>x\na\n>Mt\na\n>11\na\n>2\na\n" | seqkit sort -N -i -2

### 根據(jù)序列id進(jìn)行排序,忽略大小寫
echo -e ">seq1\nACGTNcccc\n>SEQ2\nacgtnAAAA" | seqkit sort --quiet -s -i

### 根據(jù)序列長(zhǎng)度進(jìn)行排序
echo -e ">seq1\nACGTNcccc\n>SEQ2\nacgtnAAAAnnn\n>seq3\nacgt" | seqkit sort --quiet -l


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容