[基因組工具]seqkit的使用

SeqKit的學習 --20191017

軟件的介紹

SeqKit是一種跨平臺的闯参、極快的,全面的fasta/q處理工具级历。SeqKit為所有的主流操作系統(tǒng)提供了一種可執(zhí)行的雙元文件玩讳,包括Windows熏纯,Linux樟澜,Mac OS X秩贰,并且不依賴于任何的配置或預先配置就可以直接使用。

軟件的安裝

## Install via conda
conda install -c bioconda seqkit

軟件的命令

## 序列和子序列
**seq**  轉(zhuǎn)換序列(序列顛倒丙唧,序列互補想际,提取ID)
**subseq** 從區(qū)域/gtf/bed中獲得序列胡本,包括側(cè)面的序列
**sliding** 滑動序列,支持環(huán)式基因組
**stats**   對FASTA/Q files進行簡單統(tǒng)計
**faidx** 創(chuàng)造fasta索引文件并提取子序列
**watch** 檢測并連線序列特點的柱狀圖
**sana** 清除質(zhì)量不好的單線的fastq文件
## 格式轉(zhuǎn)換
**fx2tab**  將FASTA/Q 文件轉(zhuǎn)變成表格形式 (1th: name/ID, 2nd: sequence, 3rd: quality)
**tab2fx** 轉(zhuǎn)變表格形式為fasta/q格式
**fq2fa** 轉(zhuǎn)變fastq文件為fasta文件
**convert** 在Sanger, Solexa and Illumina中轉(zhuǎn)換fastq的質(zhì)量編碼
**translate** 將DNA/RNA序列轉(zhuǎn)變成蛋白序列(支持模棱兩可的堿基)
## 搜索
**grep** 根據(jù)ID/名稱/序列/序列motif 搜索序列,且允許錯配
**locate** 定位子序列/motif,且允許錯配
**fish** 使用本地比對在較大序列中尋找短序列
**amplicon** 經(jīng)由引物檢索擴增子(或它附近特定的區(qū)域)
## bam文件的處理和監(jiān)視
**bam** 監(jiān)視和連線bam文件記錄特點的直方圖
## 設置參數(shù)
**head** 打印第一個Nfasta/q的記錄
**range** 在一個范圍內(nèi)(start:end)打印fasta/q的記錄
**sample** 通過數(shù)量或比例來體驗序列
**rmdup** 通過id/名稱/序列 來去除復制的序列
**duplicate**  復制N次的序列
**common** 通過id/名稱/序列 發(fā)現(xiàn)多條序列中共有的序列
**split** 通過id/seq region/size/parts (mainly for FASTA) 將序列劈開成文件
**split2** 將序列通過大小或部分 劈開成文件
## 編輯
**replace** 通過規(guī)律表達來代替名字或序列
**rename** 重新命名復制的ID
**restart** 為環(huán)狀基因組重新設置起始位置
**concat** 從多個文件中經(jīng)由相同的ID來連接序列
**mutate** 編輯序列(點突妆档,插入,刪除)
## 排序
**shuffle** 變換序列位置
**sort** 將序列經(jīng)由id/name/sequence 進行排序

軟件命令詳解

Sequence ID
大部分的軟件须板,包括seqkit默認將主導的非空格字母作為ID习瑰。

FASTA header ID
>123456 gene name 123456
>longname longname
>gi|110645304|ref|NC_002516.2| Pseudomona gi|110645304|ref|NC_002516.2|

舉例說明軟件如何使用

##下載參考序列甜奄,一個fastq文件课兄,兩個fasta文件
wget http://data.biostarhandbook.com/reads/duplicated-reads.fq.gz
wget ftp://ftp.ncbi.nih.gov/refseq/release/viral/viral.1.1.genomic.fna.gz
wget ftp://ftp.ncbi.nih.gov/refseq/release/viral/viral.1.protein.faa.gz

對fastq文件進行一個概括瀏覽

$ seqkit stat *.gz
file                      format  type     num_seqs    sum_len  min_len   avg_len  max_len
duplicated-reads.fq.gz    FASTQ   DNA        15,000  1,515,000      101       101      101
viral.1.1.genomic.fna.gz  FASTA   DNA             6    195,842    5,386  32,640.3  154,675
viral.1.protein.faa.gz    FASTA   Protein       112     55,855       38     498.7    3,122

在fasta/q文件中獲取每條序列的GC含量

GC content
$ seqkit fx2tab --name --only-id --gc viral*.fna.gz
NC_001798.2         70.38
NC_030692.1         50.10
NC_027892.1         40.57
NC_029642.1         39.88
NC_001607.1         50.07
NC_001422.1         44.76

Custom bases (A, C and A+C)
$ seqkit fx2tab -H -n -i -B a -B c -B ac viral.1.1.genomic.fna.gz
#name   seq qual    a   c   ac
NC_001798.2         14.87   35.03   49.90
NC_030692.1         25.03   25.25   50.28
NC_027892.1         29.68   19.44   49.11
NC_029642.1         30.14   19.22   49.36
NC_001607.1         25.30   25.54   50.84
NC_001422.1         23.97   21.48   45.45

附seqkit fx2tab 的使用(用來統(tǒng)計序列的信息)
Usage: seqkit fx2tab [flags]
Flags:
-a, --alphabet 打印字母表字母
-q, --avg-qual 打印read的平均質(zhì)量
-B, --base-content strings 輸出指定的堿基含量
-g, --gc 輸出GC含量
-H, --header-line 打印標題列
-l, --length 打印序列的長度
-n, --name 只打印名字,而沒有序列或者質(zhì)量
-i, --only-id 只打印基因的ID

從fastq/a中根據(jù)名字和ID提取序列子集

$ seqkit sample --proportion 0.001  duplicated-reads.fq.gz \
    | seqkit seq --name --only-id > id.txt  ##管道符前面的命令是隨機取總文件0.1%的序列唉擂,管道符后面的是提取前面的符合要求的序列的ID楔敌。
## 查看ID list內(nèi)容
$ head id.txt 
SRR1972739.2996
SRR1972739.3044
SRR1972739.3562
##通過ID list文件來搜索序列
$ seqkit grep --pattern-file id.txt duplicated-reads.fq.gz > duplicated-reads.subset.fq.gz

seqkit sample 的使用
-n, --number int 通過數(shù)量隨機提取序列(結(jié)果也許并不完全匹配)
-p, --proportion float 通過比例隨機提取序列
-s, --rand-seed int 隨機函數(shù)
-2, --two-pass 減少內(nèi)存占用
舉例:隨機抽取序列

seqkit sample -n 10000 -s 11 test1_1.fq -o sample.fq

seqkit sample -p 0.1 -s 11 test1_1.fq -o sample.fq

從fasta/q序列中找到合并堿基并找到它的位置(這個仿佛有點難度,不報錯也不打印內(nèi)容到屏幕)胜臊?黑忱?

$ seqkit fx2tab -n -i -a viral.1.1.genomic.fna.gz \
    | csvtk -H -t grep -f 4 -r -i -p "[^ACGT]"
## 定位簡并堿基甫煞,e.g, N and K抚吠,這個仿佛也有問題楷力,不報錯也不打印內(nèi)容到屏幕萧朝?检柬?厕吉?
seqkit grep --pattern-file id2.txt viral.1.1.genomic.fna.gz \
    | seqkit locate --ignore-case --only-positive-strand --pattern K+ --pattern N+

移去相同序列中重復的fasta/q記錄

$ seqkit rmdup --by-seq --ignore-case duplicated-reads.fq.gz > duplicated-reads.uniq.fq.gz

[INFO] 7172 duplicated records removed

seqkit rmdup 的使用(用來通過id/名稱/序列來去除重復的序列)
Usage: seqkit rmdup [flags]
Flags:
-n, --by-name 通過全名而不是id
-s, --by-seq 通過序列
-D, --dup-num-file string 保存數(shù)量的文件并列出重復的seqs
-d, --dup-seqs-file string 保存重復seqs的文件
-i, --ignore-case 忽視字母大小寫

在fastq/a序列中定位motif/子序列/酶切位點

$ cat enzymes.fa
>EcoRI
GAATTC
>MmeI
TCCRAC
>SacI
GAGCTC
>XcmI
CCANNNNNNNNNTGG
$ seqkit locate --degenerate --ignore-case --pattern-file enzymes.fa viral.1.1.genomic.fna.gz
輸出的內(nèi)容
seqID                 patternName   pattern           strand   start   end     matched
gi|526245010|ref|NC_021865.1|   MmeI   TCCRAC            +     1816    1821    TCCGAC
gi|526245010|ref|NC_021865.1|   SacI   GAGCTC            +     19506   19511   GAGCTC
gi|526245010|ref|NC_021865.1|   XcmI   CCANNNNNNNNNTGG   +     2221    2235 CCATATTTAGTGTGG
seqkit locate 的使用
Usage:
  seqkit locate [flags]
  -d, --degenerate 包含簡并堿基模式和motif
  --gtf 輸出為GTF格式
  -i, --ignore-case 忽視字母大小寫
  -m, --max-mismatch int 通過序列匹配時允許的最大錯配
  -G, --non-greedy 非貪婪模式,更快但是可能錯過與其他重疊的motif
  -P, --only-positive-strand 只搜索正鏈
  -f, --pattern-file 模式或motif文件(fasta格式)
  -p, --pattern strings 搜索pattern或motif
 
seqkit locate -i -d -p AUGGACUN test.fa

輸出結(jié)果:

seqID      patternName pattern strand start end matched

cel-mir-58a AUGGACUN  AUGGACUN  +     81 88   AUGGACUG

ath-MIR163 AUGGACUN  AUGGACUN  -     122 129  AUGGACUC

怎樣通過長度來對大量的fasta文件進行排序

$ seqkit sort --by-length viral.1.1.genomic.fna.gz > viral.1.1.genomic.sorted.fa

seqkit sort 的使用
通過id/名稱/序列/長度來排序项钮,對于fasta格式的文件署隘,使用flag -2 來減少內(nèi)存的使用磁餐,不支持fastq格式的文件
Usage:seqkit sort [flags]
Flags: 
-l, --by-length  通過序列長度
-n, --by-name 通過全名而不是id
-s, --by-seq 通過序列
-i, --ignore-case 忽視大小寫
-r, --reverse 反向排序
-2, --two-pass 雙流程模式讀取文件來降低內(nèi)存使用

根據(jù)標題信息來拆分fasta序列

## 先對fasta文件的標題進行概括瀏覽
$ seqkit head -n 3 viral.1.protein.faa.gz | seqkit seq --name --only-id

YP_009137150.1
YP_009137151.1
YP_009137152.1

## 將默認的ID轉(zhuǎn)換成新的ID
$ seqkit head -n 3 viral.1.protein.faa.gz \
    | seqkit seq --name --only-id --id-regexp "\[(.+)\]"  這一步并不懂?渣淳?入愧?

Human alphaherpesvirus 2
Human alphaherpesvirus 2
Human alphaherpesvirus 2

## 根據(jù)header進行拆分,會生成一個文件夾
$ seqkit split --by-id --id-regexp "\[(.+)\]" viral.1.protein.faa.gz

   
seqkit head 的使用(首先打印第N條fasta/q記錄)
Usage:seqkit head [flags]
Flags:
-n, --number int 先打印N個fasta/q的記錄(默認是10)

seqkit seq 的使用
對序列進行轉(zhuǎn)換(顛倒怔蚌,互補桦踊,提取ID等)
Usage:seqkit seq [flags]
Flags:
-p, --complement 取互補序列
--dna2rna DNA到RNA
--rna2dna RNA到DNA
-G, --gap-letters string  gap letters (default "- \t.")
-l, --lower-case 用小寫字母打印序列
-M, --max-len int 只打印短于最大長度的的序列
-n, --name 只打印name
-g, --remove-gaps 移去組裝序列中的gap
-r, --reverse 取反向序列
-i, --only-id 只打印ID而不是全名
-q, --qual 只打印品質(zhì)?声离?术徊?
-s, --seq 只打印序列
--id-regexp string 對于解析ID的正則表達式赠涮,(default "^(\\S+)\\s?")

seqkit split 的使用
usage:seqkit split [flags]
-i, --by-id 根據(jù)序列ID切割序列
-p, --by-part int 將一份文件分割成N份
-s, --by-size int 將一個文件按照N條序列進行分割
-O, --out-dir string 輸出路徑
-2, --two-pass 降低內(nèi)存的使用

從一個text文件已知的字符串中搜索并替換fasta標題

$ seqkit grep --by-name --use-regexp --ignore-case --pattern hypothetical viral.1.protein.faa.gz \
    | seqkit head -n 3 | seqkit seq --name  ## 此命令也是有報錯笋除,說明沒有執(zhí)行好垃它?国拇?酱吝?

$ seqkit replace --kv-file changes.tsv --pattern "^([^ ]+ )(\w+) " \
    --replacement "\${1}{kv} " --key-capt-idx 2 --keep-key viral.1.protein.faa.gz > renamed.fa


seqkit grep 的使用(通過ID/名稱/序列/序列motif來搜索序列忆嗜,允許錯配)
Usage:seqkit grep [flags]
Examples:
 1-based index    1 2 3 4 5 6 7 8 9 10
negative index    0-9-8-7-6-5-4-3-2-1
           seq    A C G T N a c g t n
           1:1    A
           2:4      C G T
         -4:-2                c g t
         -4:-1                c g t n
         -1:-1                      n
          2:-2      C G T N a c g t
          1:-1    A C G T N a c g t n
          1:12    A C G T N a c g t n
        -12:-1    A C G T N a c g t n
-n, --by-name 通過全名來匹配而不是ID
-s, --by-seq 搜索seq中的子seq霎褐,只搜索正鏈冻璃,通過-m/--max-mismatch 來允許錯配
-d, --degenerate 包含簡并堿基的pattern和motif(簡并堿基:一個符號代替某兩個或者更多堿基省艳,如編譯丙氨酸的可以有4個密碼子:GCU\GCC\GCA\GCG,這時生物學上為了方便跋炕,用字母N指代UCAG四個堿基辐烂,故說編譯丙氨酸的密碼子是GCN纠修,其中N就是簡并堿基扣草。)
-i, --ignore-case 忽視大小寫
-v, --invert-match  輸出不匹配此模式的內(nèi)容
-m, --max-mismatch int 通過序列匹配時允許的最大錯配
-p, --pattern strings 匹配模式辰妙,支持連續(xù)寫多個模式密浑,匹配任一模式即輸出肴掷。
-f, --pattern-file string 支持匹配模式寫到一個文件中呆瞻,如要提取的序列ID痴脾。
-R, --region string 搜索特定區(qū)域序列赞赖,e.g 1:12 for first 12 bases, -12:-1 for last 12 bases
-r, --use-regexp 使用正則表達式辕近,必須加入此參數(shù),如^匹配首端移宅。同-p聯(lián)合使用漏峰。
舉例:
seqkit grep -s -r -i -p ^atg cds.fa#選取正鏈中有起始密碼子的序列

seqkit grep -f ID.txt test.fa > new.fa#根據(jù)ID提取序列

seqkit grep -s -d -i -p TTSAA#簡并堿基使用浅乔。S 代表C or G.

seqkit grep -s -R 1:30 -i -r -p GCTGG##匹配限定到某區(qū)域

usage:seqkit replace(通過正則表達式來代替名字或序列)
-s, --by-seq 代替seq
-i, --ignore-case 忽視大小寫
-K, --keep-key 
-p, --pattern string 搜索正則表達式
-r, --replacement string 替換物

從兩個配對端讀數(shù)的文件提取配對的reads

## 首先創(chuàng)造兩個不平衡的PE reads文件靖苇,整個過程不報錯贤壁,但是不懂具體含義芯砸?给梅?动羽?
$ seqkit rmdup duplicated-reads.fq.gz \
    | seqkit replace --pattern " .+" --replacement " 1" \
    | seqkit sample --proportion 0.9 --rand-seed 1 --out-file read_1.fq.gz
$ seqkit rmdup duplicated-reads.fq.gz \
    | seqkit replace --pattern " .+" --replacement " 2" \
    | seqkit sample --proportion 0.9 --rand-seed 2 --out-file read_2.fq.gz
## overview
$ seqkit stat read_1.fq.gz read_2.fq.gz

file          format  type  num_seqs  sum_len  min_len  avg_len  max_len
read_1.fq.gz  FASTQ   DNA      9,033  912,333      101      101      101
read_2.fq.gz  FASTQ   DNA      8,965  905,465      101      101      101
## sequence headers
$ seqkit head -n 3 read_1.fq.gz | seqkit seq --name

SRR1972739.1 1
SRR1972739.3 1
SRR1972739.4 1

$ seqkit head -n 3 read_2.fq.gz | seqkit seq --name

SRR1972739.1 2
SRR1972739.2 2
SRR1972739.3 2
## 首先提取兩個文件序列的ID渴邦,并計算它們的交集
$ seqkit seq --name --only-id read_1.fq.gz read_2.fq.gz \
    | sort | uniq -d > id.txt

$ # number of IDs
wc -l id.txt
8090 id.txt
## 然后用id.txt來提取reads
$ seqkit grep --pattern-file id.txt read_1.fq.gz -o read_1.f.fq.gz
$ seqkit grep --pattern-file id.txt read_2.fq.gz -o read_2.f.fq.gz
## 用md5sum來檢查兩個文件的IDs是否是相同的
$ seqkit seq --name --only-id read_1.f.fq.gz > read_1.f.fq.gz.id.txt
$ seqkit seq --name --only-id read_2.f.fq.gz > read_2.f.fq.gz.id.txt
$ md5sum read_*.f.fq.gz.id.txt
537c57cfdc3923bb94a3dc31a0c3b02a  read_1.f.fq.gz.id.txt
537c57cfdc3923bb94a3dc31a0c3b02a  read_2.f.fq.gz.id.txt

##sort 一下
$ gzip -d -c read_1.f.fq.gz \
    | seqkit fx2tab \
    | sort -k1,1 -T . \
    | seqkit tab2fx \
    | gzip -c > read_1.f.sorted.fq.gz
$ gzip -d -c read_2.f.fq.gz \
    | seqkit fx2tab \
    | sort -k1,1 -T . \
    | seqkit tab2fx \
    | gzip -c > read_2.f.sorted.fq.gz

將兩個fasta文件連接成一個

$ cat 1.fa
>seq1
aaaaa
>seq2
ccccc
>seq3
ggggg

$ cat 2.fa
>seq3
TTTTT
>seq2
GGGGG
>seq1
CCCCC
一行命令
$ seqkit concat 1.fa 2.fa
>seq1
aaaaaCCCCC
>seq2
cccccGGGGG
>seq3
gggggTTTTT
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末倦青,一起剝皮案震驚了整個濱河市产镐,隨后出現(xiàn)的幾起案子癣亚,更是在濱河造成了極大的恐慌述雾,老刑警劉巖绰咽,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件琐谤,死亡現(xiàn)場離奇詭異斗忌,居然都是意外死亡织阳,警方通過查閱死者的電腦和手機唧躲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進店門弄痹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肛真,“玉大人蚓让,你說我怎么就攤上這事≌粒” “怎么了寞肖?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長右蕊。 經(jīng)常有香客問我饶囚,道長萝风,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮揩晴,結(jié)果婚禮上贪磺,老公的妹妹穿的比我還像新娘寒锚。我一直安慰自己刹前,他們只是感情好腮郊,可當我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布轧飞。 她就那樣靜靜地躺著过咬,像睡著了一般掸绞。 火紅的嫁衣襯著肌膚如雪衔掸。 梳的紋絲不亂的頭發(fā)上敞映,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天捷犹,我揣著相機與錄音萍歉,去河邊找鬼枪孩。 笑死销凑,一個胖子當著我的面吹牛斗幼,可吹牛的內(nèi)容都是我干的抚垄。 我是一名探鬼主播呆馁,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼阴挣,長吁一口氣:“原來是場噩夢啊……” “哼畔咧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起梅桩,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎洪添,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體外臂,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年罪佳,在試婚紗的時候發(fā)現(xiàn)自己被綠了赘艳。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蕾管。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡掰曾,死狀恐怖旷坦,靈堂內(nèi)的尸體忽然破棺而出秒梅,到底是詐尸還是另有隱情捆蜀,我是刑警寧澤辆它,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站似袁,受9級特大地震影響扬霜,放射性物質(zhì)發(fā)生泄漏而涉。R本人自食惡果不足惜啼县,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一余蟹、第九天 我趴在偏房一處隱蔽的房頂上張望威酒。 院中可真熱鬧挺峡,春花似錦橱赠、人聲如沸狭姨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至栋豫,卻和暖如春丧鸯,著一層夾襖步出監(jiān)牢的瞬間嫩絮,已是汗流浹背剿干。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工杠步, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留榜轿,地道東北人谬盐。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓颠蕴,卻偏偏與公主長得像助析,于是被迫代替她去往敵國和親外冀。 傳聞我的和親對象是個殘疾皇子雪隧,可洞房花燭夜當晚...
    茶點故事閱讀 45,585評論 2 359

推薦閱讀更多精彩內(nèi)容