2016-06-22 11 views
3

私はテストここのようなFASTAファイルを持っている:私の好きなシンプルなgrepコマンドを入力するとgrepコマンドがいくつかの行の間に " - "を出力するのはなぜですか?

>HWI-D00196:168:C66U5ANXX:3:1106:16404:19663 1:N:0:GCCAAT 
CCTAGCACCATGATTTAATGTTTCTTTTGTACGTTCTTTCTTTGGAAACTGCACTTGTTGCAACCTTGCAAGCCATATAAACACATTTCAGATATAAGGCT 
>HWI-D00196:168:C66U5ANXX:3:1106:16404:19663 2:N:0:GCCAAT 
AAAACATAAATTTGAGCTTGACAAAAATTAAAAATGAGCCCAGCCTTATATCTGAAATGTGTTTATATGGCTTGCAAGGTTGCAACAAGTGCAGTTTCCAA 
>HWI-D00196:168:C66U5ANXX:4:1304:10466:100132 1:N:0:GCCAAT 
ATATTTGAATTATCAGAAATAAACACAAAGAAAACCTAGAACAGATAATTTCTTCCACATTATTGATCAGATACAGATTTCAAGGGTACCGTTGTGAATTG 
>HWI-D00196:168:C66U5ANXX:4:1304:10466:100132 2:N:0:GCCAAT 
AAACGATTGATAGATCTATTTGCATTATAAAAACATTAAAAAAACAAAATACTGATTAAATGTCGTCTTTCTATTCCACAATTTTATAGATCTCACTGTAT 
>HWI-D00196:168:C66U5ANXX:4:1307:12056:64030 1:N:0:GCCAAT 
CTTACTTTGCCTCTCTCAGCCAATGTCTCCTGAGTCTAATTTTTTGGAGGCTAAGCTATGAGCTAATGATGGGTTCCATTTGGGGCCAATGCTTCAGCCTG 
>HWI-D00196:168:C66U5ANXX:4:1307:12056:64030 2:N:0:GCCAAT 
CTATTAGTTCTTATCTTTGCCTGCAAATATAAGACTAGCGCTTGAGTAGCTGACAGAGACAAAGTAAGCTGGAGTGTTTATCACCTGGTCACTCCAATTGT 

を:

grep -B1 "CTT" test.fasta 

私は本当に奇妙な出力を得る「 - 」されます時々そのようにヒットのgrep上記改行の上に置か:

>HWI-D00196:168:C66U5ANXX:4:1304:10466:100132 2:N:0:GCCAAT 
AAACGATTGATAGATCTATTTGCATTATAAAAACATTAAAAAAACAAAATACTGATTAAATGTCGTCTTTCTATTCCACAATTTTATAGATCTCACTGTAT 
-- 
>HWI-D00196:168:C66U5ANXX:4:1307:12056:64030 2:N:0:GCCAAT 
CTATTAGTTCTTATCTTTGCCTGCAAATATAAGACTAGCGCTTGAGTAGCTGACAGAGACAAAGTAAGCTGGAGTGTTTATCACCTGGTCACTCCAATTGT 

をいくつかFASTAエントリがこれを持っているし、他の人がいない理由を私は理解することはできません。 -B1を削除すると、この問題は発生しません。私はgrep -v "--"ステートメントでファイルからこれらの行を削除できますが、ここで何が起こっているのかを本当に理解したいと思います。

答えて

4

-B1オプションを使用すると、先導するコンテキストの1行を要求しています。これはgrepが一致した行とその直前の行の両方を表示することを意味します。以下に示すように、各試合は、それ自体でライン上--で区切られます。

$ man grep | grep -B1 context 
    -A num, --after-context=num 
      Print num lines of trailing context after each match. See also 
-- 
    -B num, --before-context=num 
      Print num lines of leading context before each match. See also 
-- 
    -C[num, --context=num] 
      Print num lines of leading and trailing context surrounding each 
-- 
    --context[=num] 
      Print num lines of leading and trailing context. The default is 

あなたはすべての試合の間--が表示されない理由は、コンテキストは唯一試合連続の配列の上に表示されていることです。したがって、次の例を参照してください。そして、

seq 13 | grep -B1 1 
1 
-- 
9 
10 
11 
12 
13 

以降のコマンドは、すべての1と13の間の数字だけが最初の行と1が含まれている上の10からのラインを作り出すので、あなたは自身のグループで1を参照してください--、次に1行のコンテキスト、続いて連続する一致する行のグループ。 grepのマンページの

+1

ありがとうございます@chthonicdaemon、私の混乱は、いくつかの**マッチだけが '--'で区切られ、他が他ではありません。 – michberr

+1

' --'は不一致のマッチがある場合にのみ置かれます。私は私の答えを更新します。 – chthonicdaemon

+0

明白なことを言う危険があるので、例えば 'grep -B1"を使って、一致するセパレータを削除できます。CTT "test.fasta | grep -v^- 'です。 – msandiford

0

GREP_COLORSセクションでは、こう述べています。

は、出力の様々な>の部分を強調するために使用される色やその他の属性を指定します。その値はコロンで区切られたリスト のデフォルトの ms = 01; 31:mc = 01; 31:sl =:cx =:fn = 35:ln = 32:bn = 32:se = 36 rvおよび neブール値の機能が省略されています(つまり、false)。

選択ラインフィールド(コンテキストラインフィールド間:)、(間に挿入されるセパレータ用SE = 36
SGRのサブ - )、及び隣接するライン群間 0以外のコンテキストは が指定されています( - )。デフォルトは 端末のデフォルトのバックグラウンド上にシアンのテキストの前景です。

は、ファイルSAMPLE.TXTを考えてみます。ここでは

$cat sample.txt 
ABBB 
AAB 
AAB 
S 
S 
S 
AABB 
ABAA 
BAA 
CCC 
$grep -B2 'AAB' sample.txt 
ABBB 
AAB 
AAB 
-- 
S 
S 
AABB 

------AABSは、実際のファイルに隣接するラインではないことをあなたに伝えgrepの方法です。

関連する問題