Como extrair linhas entre dois padrões na mesma coluna?

1

Eu quero extrair as linhas entre PAT 1 para PAT 2 incluindo as linhas de padrão dependendo apenas da primeira coluna, os padrões são existentes apenas uma vez na primeira coluna, mas elas podem existir por mais de uma vez nas outras colunas. exemplo para o meu arquivo de entrada

0.000 0.8928 0.893
0.500 PAT1 0.902
PAT1 0.8974 0.9116
1.500 0.8986 0.9199
2.000 0.8989 0.9258
2.500 PAT1  0.9285
3.000 0.8978 0.9272
3.500 0.8959 0.9219
PAT2  0.8936 0.9128
4.500 0.8912 0.9009
5.000 0.8889 PAT2
5.500 0.887 0.8718
6.000 PAT2 0.8565
6.500 0.8858 0.8414
7.000 0.8871 0.8271

minha saída deve ser assim

PAT1 0.8974 0.9116
    1.500 0.8986 0.9199
    2.000 0.8989 0.9258
    2.500 PAT1  0.9285
    3.000 0.8978 0.9272
    3.500 0.8959 0.9219
    PAT2  0.8936 0.9128

minha trilha é usar o awk como segue

awk '/PAT1/,/PAT2/' input

mas isso é independente na coluna

    
por Mohsen El-Tahawy 18.01.2017 / 20:44

2 respostas

4

Altere seu código awk assim:

awk '$1 ~ /PAT1/,$1 ~ /PAT2/' input

Dessa forma, você faz a correspondência com a coluna 1 e não com a linha inteira.

    
por 18.01.2017 / 20:49
1

com sed :

$ sed -n '/^PAT1/,/^PAT2/p' input
PAT1 0.8974 0.9116 
1.500 0.8986 0.9199
2.000 0.8989 0.9258
2.500 PAT1  0.9285 
3.000 0.8978 0.9272
3.500 0.8959 0.9219
PAT2  0.8936 0.9128

O script sed imprimirá somente ( p ) linhas da entrada que está no intervalo /^PAT1/ a /^PAT2/ inclusive (a saída padrão de cada linha é desativada com -n ).

As âncoras ( ^ ) são necessárias para corresponder apenas as strings no início da linha.

    
por 18.01.2017 / 22:28

Tags