Você pode fazer isso em awk
. Você precisaria salvar as 6 linhas anteriores para comparar a terceira última linha com a 6ª última linha e a atual. Para isso, o truque comum é usar um buffer de anel, que é uma matriz indexada por NR%6
, em que 6
é o número de linhas que você deseja manter.
awk '
NR > 6 {
x = saved[NR%6]; y = saved[(NR - 3) % 6]; z = $0
if (y >= 2*x && y >= 2*z) print y
}
{saved[NR % 6] = $0}' < file
Para sua edição: salve a chave e o valor para comparar:
awk -v key=1 -v value=2 '
NR > 6 {
x = saved_value[NR%6]; y = saved_value[(NR - 3) % 6]; z = $value
if (y >= 2*x && y >= 2*z) print saved_key[(NR - 3) % 6]
}
{saved_key[NR % 6] = $key; saved_value[NR % 6] = $value}' < file
em que key
é o índice da coluna que você deseja imprimir e value
da coluna com os valores que você deseja comparar.
Ou com base na métrica que você deseja com base nas colunas 2, 3 e 4, como a média:
awk '
{metric = ($2 + $3 + $4) / 3}
NR > 6 {
x = saved_metric[NR%6]; y = saved_metric[(NR - 3) % 6]; z = $metric
if (y >= 2*x && y >= 2*z) print saved_key[(NR - 3) % 6]
}
{saved_key[NR % 6] = $key; saved_metric[NR % 6] = $metric}' < file