Bash 文件中特定于Grep的行

Bash 文件中特定于Grep的行,bash,grep,Bash,Grep,我的文件看起来像这样 Tree:0,pos:0,len:2.29276,TMRCA:0.795328,ARG:,len:2.29276,TMRCA:0.795328 NEWICK_TREE: [169]((2:0.147398,(6:0.136844,(((9:0.00903981,4:0.00903981):0.084126,5:0.0931658):0.0077254,(7:0.0053182,8:0.0053182):0.095573):0.0359525):0.0105546):0

我的文件看起来像这样

Tree:0,pos:0,len:2.29276,TMRCA:0.795328,ARG:,len:2.29276,TMRCA:0.795328
NEWICK_TREE:    [169]((2:0.147398,(6:0.136844,(((9:0.00903981,4:0.00903981):0.084126,5:0.0931658):0.0077254,(7:0.0053182,8:0.0053182):0.095573):0.0359525):0.0105546):0.647929,(0:0.199142,(1:0.0103058,3:0.0103058):0.188836):0.596186);
SITE:    0       0.0123617064        0.648849164    0010111111
iHistoryMax: 0
Tree:1,pos:0.0169589,len:2.28476,TMRCA:0.795328,ARG:,len:2.28476,TMRCA:0.795328
NEWICK_TREE:    [303]((2:0.147398,((6:0.00230499,1:0.00230499):0.134539,(((9:0.00903981,4:0.00903981):0.084126,5:0.0931658):0.0077254,(7:0.0053182,8:0.0053182):0.095573):0.0359525):0.0105546):0.647929,(0:0.199142,3:0.199142):0.596186);
iHistoryMax: 1
Tree:2,pos:0.0472255,len:2.77342,TMRCA:0.795328,ARG:,len:2.77342,TMRCA:0.795328
NEWICK_TREE:    [67](((6:0.00230499,1:0.00230499):0.134539,(((9:0.00903981,4:0.00903981):0.084126,5:0.0931658):0.0077254,(7:0.0053182,8:0.0053182):0.095573):0.0359525):0.658484,((0:0.199142,3:0.199142):0.436921,2:0.636062):0.159266);
iHistoryMax: 2
Tree:3,pos:0.0539094,len:2.96385,TMRCA:0.795328,ARG:,len:2.96385,TMRCA:0.795328
NEWICK_TREE:    [40](((6:0.00230499,1:0.00230499):0.134539,(((9:0.00903981,4:0.00903981):0.084126,5:0.0931658):0.0077254,(7:0.0053182,8:0.0053182):0.095573):0.0359525):0.658484,((0:0.389568,3:0.389568):0.246494,2:0.636062):0.159266);
iHistoryMax: 3

但是,我只需要每个树的pos(在行树中:1,pos),并且输出应该是1列中3行(或更多行)后跟pos的数字。树线的位置并不总是在每3行中,因为中间的部分长度可能会发生变化。这可以在bash中完成。

使用带分隔符的
awk
:和
,然后打印所需的字段。例如,这将打印
pos
编号:

awk -F[:,] '/^Tree:/{print $2,$4}' file
将grep与-p一起使用

grep -Po "(?<=Tree.*pos:)[0-9.]+" file

0
0.0169589
0.0472255
0.0539094

grep-Po”(?好的,很好。你尝试了什么?当你用
grep
标记时,你可能会有一些想法。像grep模式之类的东西,但我不知道如何只获取pos后面的数字。你是否仅限于bash?否则类似于:
cat trees.txt;grep”Tree:| perl-pe的/Tree:(\d+),pos:(\d+).*/$1$2/'>>results.txt
就是你想要的,如果我输入这个,我会得到一个结果,但是所有的值都是0…这可能是因为它只会将pos后面的第一个字符变灰吗?在所有情况下都是0?我的疏忽:试试
's/Tree:(\d+),pos:(\d+。\d+).*/$1$2/'
而不是因为它是特别的树行:
grep-oP'^Tree.*pos:\K:[^,]+“
谢谢,我已经更新了。我把
放在关键字中。你应该把你的作为答案。因为我们的方式实际上是不同的。