生物情報LInux学習5

8123 ワード

http://mp.weixin.qq.com/s/Rw6ivF_qBPCWiiGL 7 lxc_g
ファイル内容操作(二)
ファイルの並べ替えseq:一連の数字を生成する.man seqは、その具体的な使用を確認する.これはseqを使用して、下流分析に使用される入力ファイルを生成する.
#   1 10  ,   1
ct@ehbio:~$ seq 1 10
1
2
3
4
5
6
7
8
9
10
#   1 10  ,   1,     
ct@ehbio:~$ seq -s ' ' 1 10
1 2 3 4 5 6 7 8 9 10
#   1 10  ,   2
#   3  ,       ,          
ct@ehbio:~$ seq -s ' ' 1 2 10
1 3 5 7 9
#                  
#            
ct@ehbio:~$ cat test
ct@ehbio:~$ cat test
0
3
6
9
12
15
3
9
15
sort:並べ替え、デフォルトは文字コードで並べ替えられています.デジタルサイズで並べ替えたい場合は、-nパラメータを追加する必要があります.
#          ,     0,   1, 3, 6, 9
ct@ehbio:~$ sort test
0
12
15
15
3
3
6
9
9
#       
ct@ehbio:~$ sort -n test
0
3
3
6
9
9
12
15
15
sort -u:重複行を除去することは、sort | uniqに等しい.
ct@ehbio:~$ sort -nu test
0
3
6
9
12
15
sort file | uniq -d:重複行を取得する.(d=duplication)
ct@ehbio:~$ sort -n test | uniq -d
3
9
15
sort file | uniq -c:各行の重複回数を取得する.
#           ,        
ct@ehbio:~$ sort -n test | uniq -c
1 0
2 3
1 6
2 9
112
215
#          
ct@ehbio:~$ cat  a
> b
> c
> b
> a
> e
> d
> a
> END
#           ,        
ct@ehbio:~$ sort test2 | uniq -c
3 a
2 b
1 c
1 d
1 e
#   uniq   ,      ,       
ct@ehbio:~$ cat test2 | uniq -c
1 a
1 b
1 c
1 b
1 a
1 e
1 d
1 a
uniq -cの結果は、元の行が前であり、各行のカウントが後であるように整理される.awkは、データ処理モードが行単位で処理される強力なテキスト処理ツールである.1行ずつ読み込み、操作します.OFS:出力ファイルの列区切り子;FSは、入力ファイルの列区切り子(デフォルトは空白文字)である.awkの中の列は第1からnまで、それぞれ$1$2$nと記録されている.BEGINは、ファイルの読み込み前に基本パラメータを設定することを示す.これに対応するのはENDであり、ファイルの読み込みが完了した後のみ動作する.BEGINではなく、ENDの先頭の{}は、ファイルの読み取り、処理の部分である.
#       ,           
# awk             ,       ,    2 
ct@ehbio:~$ sort test2 | uniq -c | awk'BEGIN{OFS="\t";}{print $2, $1}'
a3
b2
c1
d1
e1
二列のファイルを第二列に並べ替えてください.sort -k2,2n.
#          
ct@ehbio:~$ sort test2 | uniq -c | awk'BEGIN{OFS="\t";}{print $2, $1}' | sort -k2, 2n
c1
d1
e1
b2
a3
#          
#                     (-r)
#    3             
ct@ehbio:~$ sort test2 | uniq -c | awk'BEGIN{OFS="\t";}{print $2,$1}' | sort -k2,2n -k1,1r
e1
d1
c1
b2
a3
FASTAシーケンス抽出
単一の行のシーケンスFASTAファイルを生成し、特定の遺伝子のシーケンスを抽出し、最も簡単なのはgrepコマンドを使用することである.grepは、前にも述べたように、後には、主な用途がファイル中の文字列にマッチすることをベースに、一連の動作を行うこともしばしば言及されている.正規表現を使うと非常に強力です.正規表現のバージョンが多く、ほとんどの言語には独自のルールがあります.この文書は展開されません.どちらを使うべきですか?
#      FASTA  
ct@ehbio:~$ cat  >SOX2
> ACGAGGGACGCATCGGACGACTGCAGGACTGTC
> >POU5F1
> ACGAGGGACGCATCGGACGACTGCAGGACTGTC
> >NANOG
> CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT
> END
ct@ehbio:~$ cat test.fasta
>SOX2
ACGAGGGACGCATCGGACGACTGCAGGACTGTC
>POU5F1
ACGAGGGACGCATCGGACGACTGCAGGACTGTC
>NANOG
CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT
# grep    SOX2  
# -A 1       ,         (A: after)
ct@ehbio:~$ grep -A 1 'SOX2' test.fasta
>SOX2
ACGAGGGACGCATCGGACGACTGCAGGACTGTC
#     AWK
#         >  ,   ,        ,      ,    。
# sub  , sub(      ,     ,      )
#         ,     ,    。
# seq[name]:        ,name key,    。       name    。
ct@ehbio:~$ awk'BEGIN{OFS=FS="\t"}{if($0~/>/) {name=$0; sub(">","", name);} else seq[name]=$0;}END{print ">SOX2"; printseq["SOX2"]}' test.fasta
>SOX2
ACGAGGGACGCATCGGACGACTGCAGGACTGTC
複数行のFASTAシーケンスの抽出は面倒くさいです.一つの方法はシングルラインのシーケンスに変えて、上のように処理します.sedおよびtrは、最も一般的な文字置換ツールである.
ct@ehbio:~$ cat  >SOX2
> ACGAGGGACGCATCGGACGACTGCAGGACTGTC
> ACGAGGGACGCATCGGACGACTGCAGGACTGTC
> ACGAGGGACGCATCGGACGACTGCAGGAC
> >POU5F1
> CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT
> CGGAAGGTAGTCGTCAGTGCAGCGAGTCC
> >NANOG
> ACGAGGGACGCATCGGACGACTGCAGGACTGTC
> ACGAGGGACGCATCGGACGACTGCAGG
> ACGAGGGACGCATCGGACGACTGCAGGACTGTC
> ACGAGGGACGCATCGGACGACTGCAGGACTGT
> END
# >          TAB ,         
# TAB    ,      
# \(\)         ,\1   ()         
#       sed
ct@ehbio:~$ sed 's/^\(>.*\)/\1\t/'test.fasta
>SOX2
ACGAGGGACGCATCGGACGACTGCAGGACTGTC
ACGAGGGACGCATCGGACGACTGCAGGACTGTC
ACGAGGGACGCATCGGACGACTGCAGGAC
>POU5F1
CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT
CGGAAGGTAGTCGTCAGTGCAGCGAGTCC
>NANOG
ACGAGGGACGCATCGGACGACTGCAGGACTGTC
ACGAGGGACGCATCGGACGACTGCAGG
ACGAGGGACGCATCGGACGACTGCAGGACTGTC
ACGAGGGACGCATCGGACGACTGCAGGACTGT
#  cat -A            
# ^I  tab 
# $    
ct@ehbio:~$ sed 's/^\(>.*\)/\1\t/'test.fasta | cat -A
>SOX2^I$
ACGAGGGACGCATCGGACGACTGCAGGACTGTC$
ACGAGGGACGCATCGGACGACTGCAGGACTGTC$
ACGAGGGACGCATCGGACGACTGCAGGAC$
>POU5F1^I$
CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT$
CGGAAGGTAGTCGTCAGTGCAGCGAGTCC$
>NANOG^I$
ACGAGGGACGCATCGGACGACTGCAGGACTGTC$
ACGAGGGACGCATCGGACGACTGCAGG$
ACGAGGGACGCATCGGACGACTGCAGGACTGTC$
ACGAGGGACGCATCGGACGACTGCAGGACTGT$
#            
# tr    ,     ,     `man tr`  
#       ,      。
ct@ehbio:~$ sed 's/^\(>.*\)/\1\t/'test.fasta | tr '
' ' ' >SOX2ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGAC >POU5F1CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT CGGAAGGTAGTCGTCAGTGCAGCGAGTCC >NANOGACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGG ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACTGT # ct@ehbio:~$ sed 's/^\(>.*\)/\1\t/'test.fasta | tr '
' ' ' | sed -e 's/ $/
/' >SOX2ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGAC >POU5F1CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT CGGAAGGTAGTCGTCAGTGCAGCGAGTCC >NANOGACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGG ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACTGT # ' >' + # , -e ct@ehbio:~$ sed 's/^\(>.*\)/\1\t/'test.fasta | tr '
' ' ' | sed -e 's/ $/
/' -e 's/ >/
>/g' >SOX2ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGAC >POU5F1CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT CGGAAGGTAGTCGTCAGTGCAGCGAGTCC >NANOGACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGACTGT # ct@ehbio:~$ sed 's/^\(>.*\)/\1\t/'test.fasta | tr '
' ' ' | sed -e 's/ $/
/' -e 's/ >/
>/g' -e 's/ //g' >SOX2ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGAC >POU5F1CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGTCGGAAGGTAGTCGTCAGTGCAGCGAGTCC >NANOGACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACTGT # TAB ct@ehbio:~$ sed 's/^\(>.*\)/\1\t/'test.fasta | tr '
' ' ' | sed -e 's/ $/
/' -e 's/ >/
>/g' -e 's/ //g'-e 's/\t/
/g' >SOX2 ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGAC >POU5F1 CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGTCGGAAGGTAGTCGTCAGTGCAGCGAGTCC >NANOG ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACTGT
または簡単に、前のawkで少し修正してください.
#      
#    fasta  ,       ,seq[name]=$0
#    fasta  ,                 ,seq[name]=seq[name]$0
ct@ehbio:~$ awk'BEGIN{OFS=FS="\t"}{if($0~/>/) {name=$0; sub(">","", name);} else seq[name]=seq[name]$0;}END{print">SOX2"; print seq["SOX2"]}' test.fasta
>SOX2
ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGAC