Eu tenho um arquivo mais ou menos como
header_one
param1
param2
...
data_one
data1
data2
data3
data4
...
header_two
param1
param2
...
data_two
data1
data2
data3
data4
Eu gostaria de extrair todos os header
blocos com N
as seguintes linhas e todos os data
blocos com M != N
as seguintes linhas, mantendo a ordem em que aparecem no arquivo e descartando todo o resto.
Se M == N == 8
eu pudesse, por exemplo, fazer
grep -A8 -E "header_|data_"
Mas e se eu quiser ter um contexto diferente para cada padrão?
Uma solução ad-hoc com awk poderia ser algo assim:
n
é definido em linhas correspondentes e é decrementado para cada linha. As linhas são impressas quandon
é positivo com um separador após cada bloco. Com os valores acima, ele imprimiriaheader_
linhas mais uma próxima linha edata_
linhas mais duas próximas linhas.Se os blocos de contexto puderem se sobrepor, o novo valor de
n
substituirá o valor anterior. Para evitar isso, adicione condições para proteger as atribuições:Isso deve ser melhor para lidar com casos onde há
data_
eheader_
em linhas consecutivas.Eu tentei com o comando sed abaixo Como testado funcionou bem, avise-me para qualquer confusão
resultado