列中两个模式之间的grep字符串

时间:2014-05-16 18:07:32

标签: bash awk sed grep

我有一个由一个标签分隔的2列的表,我想解析第二列。这是我表格的一行示例:

Solyc00g005080.1.1  query_length=98;subject_id=D3WD45;Name=D3WD45_XIMAM;Note=Putative RF2 protein OS-Ximenia americana GN-ycf2 PE-3 SV-1;subject_length=2285;subject_start=1509;subject_end=1588;e-value=  3e-38;identities=77/80 (96%25);gaps=0;positives=79/80 (98%25);length_coverage=80/98 (81.63%25)

我想要的输出:

Solyc00g005080.1.1  Putative RF2 protein OS-Ximenia americana GN-ycf2 PE-3 SV-1

我尝试了几种与grep和awk的组合,但我找不到正确的方法。我需要一个awk/sed/grep命令来解析第二列中Note=;之后的字符串。

2 个答案:

答案 0 :(得分:3)

$ sed -r 's/(.*\t).*Note=([^;]+).*/\1\2/' file
olyc00g005080.1.1       Putative RF2 protein OS-Ximenia americana GN-ycf2 PE-3 SV-1

答案 1 :(得分:0)

试试这个GNU sed命令,

sed -r 's/^(.*)( +).*Note=(.*);.*;.*;.*;.*;.*;.*;.*;.*/\1\2\3/g' file

示例:

$ echo 'Solyc00g005080.1.1             query_length=98;subject_id=D3WD45;Name=D3WD45_XIMAM;Note=Putative RF2 protein OS-Ximenia americana GN-ycf2 PE-3 SV-1;subject_length=2285;subject_start=1509;subject_end=1588;e-value=  3e-38;identities=77/80 (96%25);gaps=0;positives=79/80 (98%25);length_coverage=80/98 (81.63%25)' | sed -r 's/^(.*)( +).*Note=(.*);.*;.*;.*;.*;.*;.*;.*;.*/\1\2\3/g'
Solyc00g005080.1.1             Putative RF2 protein OS-Ximenia americana GN-ycf2 PE-3 SV-1