Você pode usar o awk para lidar com situações como essa. Por exemplo, para extrair do seu arquivo bruto apenas os 2 números SNR e 2 Attn e dá-os a rrd na ordem dos dois downs, depois os dois altos:
awk '/^SNR/ { snrdown = $3; snrup = $4; }
/^Attn/ { attndown = $2; attnup = $3; }
END { data = sprintf("N:%s:%s:%s:%s", snrdown, attndown, snrup, attnup);
system("rrdtool update " data " myrrdfile");
}' <rawfile
A primeira linha do awk corresponde apenas à linha que começa com "SNR". Por padrão, o awk divide as linhas em campos separados por espaço em branco. Os campos são numerados de 1. Portanto, $ 3 é o campo com 21,8 neste exemplo. O valor é salvo em uma variável que nomeamos arbitrariamente.
Da mesma forma, a segunda linha do awk corresponde apenas à linha "Attn", mas como não há espaço entre ela e "(dB)", nosso primeiro número está no campo $ 2.
A parte END é feita após todas as linhas terem sido lidas do arquivo rawfile
.
Ele cria uma string de dados para rrd (que precisa de algo como N: 21.8: 26.0: ...). Cada %s
na string de formato é substituído por uma das variáveis após o formato.
vale a pena conhecer o awk. É muito versátil.