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.
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
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.
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.