为什么我的grep命令输出" - "某些线之间?

时间:2016-06-22 04:15:17

标签: grep fasta

我有一个类似测试的fasta文件:

>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命令时,如:

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 "--"声明从我的文件中删除这些行,但我真的很想了解这里发生了什么。

2 个答案:

答案 0 :(得分:4)

您正在使用-B1选项要求一行前导上下文。这意味着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

seq命令生成1到13之间的所有数字。只有第一行和10上的行包含1,所以你在自己的组中看到1,然后是--,然后是一行上下文,然后是连续匹配行的组。

答案 1 :(得分:0)

grep联机帮助页的

GREP_COLORS部分说:

  

指定用于突出显示各种>的颜色和其他属性。部分输出。它的值是以冒号分隔的列表   默认的功能   ms = 01; 31:mc = 01; 31:sl =:cx =:fn = 35:ln = 32:bn = 32:se = 36与rv和   省略了布尔功能(即假)。

  

se = 36
用于插入之间的分隔符的SGR子字符串   选定的行字段(:),上下文行字段,( - )和   当非零上下文时,在相邻行组之间   指定( - )。默认值是青色文本前景   终端的默认背景。

考虑文件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

此处--grep告诉您AAB之前的--S之后的--不是相邻行的方式DoNotSerializeMe实际文件。