Use grep
grep -E "^#1:|tree length for" infile.txt
ou sed
sed -n '/^#1:/p;/^tree length for/p' infile.txt
Eu quero extrair todas as linhas em um arquivo contendo esses padrões: "# 1:" e "comprimento da árvore para".
Entrada:
#1: nexus0002_Pseudomonas_10M
branch t N S dN/dS dN dS N*dN S*dS
6..5 0.000 390.0 195.0 0.0668 0.0000 0.0000 0.0 0.0
6..7 0.013 390.0 195.0 0.0668 0.0008 0.0114 0.3 2.2
7..1 0.000 390.0 195.0 0.0668 0.0000 0.0000 0.0 0.0
7..4 0.000 390.0 195.0 0.0668 0.0000 0.0000 0.0 0.0
6..8 0.000 390.0 195.0 0.0668 0.0000 0.0000 0.0 0.0
8..2 0.013 390.0 195.0 0.0668 0.0008 0.0114 0.3 2.2
8..3 0.013 390.0 195.0 0.0668 0.0008 0.0114 0.3 2.2
tree length for dN: 0.0023
tree length for dS: 0.0341
#1: nexus0003_Pseudomonas_10M
branch t N S dN/dS dN dS N*dN S*dS
6..5 0.000 390.0 195.0 0.0668 0.0000 0.0000 0.0 0.0
6..7 0.013 390.0 195.0 0.0668 0.0008 0.0114 0.3 2.2
7..1 0.000 390.0 195.0 0.0668 0.0000 0.0000 0.0 0.0
7..4 0.000 390.0 195.0 0.0668 0.0000 0.0000 0.0 0.0
6..8 0.000 390.0 195.0 0.0668 0.0000 0.0000 0.0 0.0
8..2 0.013 390.0 195.0 0.0668 0.0008 0.0114 0.3 2.2
8..3 0.013 390.0 195.0 0.0668 0.0008 0.0114 0.3 2.2
tree length for dN: 0.0111
tree length for dS: 0.0444
Saída:
#1: nexus0002_Pseudomonas_10M
tree length for dN: 0.0023
tree length for dS: 0.0341
#1: nexus0003_Pseudomonas_10M
tree length for dN: 0.0111
tree length for dS: 0.0444
Existe alguma solução sed simples?
A partir dos dados que você forneceu, parece que você deseja obter todas as linhas que começam com um caractere não em branco:
$ grep '^[^[:blank:]]' file.in
#1: nexus0002_Pseudomonas_10M
tree length for dN: 0.0023
tree length for dS: 0.0341
#1: nexus0003_Pseudomonas_10M
tree length for dN: 0.0111
tree length for dS: 0.0444
com sed
:
$ sed -n '/^[^[:blank:]]/p' file.in
Em grep
e sed
, [[:blank:]]
corresponderá a um único espaço ou caractere de tabulação. [^[:blank:]]
com, portanto, corresponde a qualquer caractere que não seja um espaço ou uma tabulação. Colocar ^
na frente disso ancora o padrão ao início da linha.