生物情報LInux学習5
8123 ワード
http://mp.weixin.qq.com/s/Rw6ivF_qBPCWiiGL 7 lxc_g
ファイル内容操作(二)
ファイルの並べ替え
単一の行のシーケンスFASTAファイルを生成し、特定の遺伝子のシーケンスを抽出し、最も簡単なのは
ファイル内容操作(二)
ファイルの並べ替え
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