Um programa awk
:
BEGIN { FS = ","; col = "COLOR1"; i = 1 }
!/^[0-9]/ { next }
$3 == "" {
val = sprintf("%.0f", $2)
data = data ? data OFS val : val
col = col OFS "COLOR" ++i
next
}
$2 < min { min = $2 }
$3 > max { max = $3 }
END {
printf("NAME:\nFROM= %s %s\nTO= %s %s\nCOLOR= %s\n",
min, data, data, max, col)
}
Teste:
$ awk -f script.awk file.csv
NAME:
FROM= -100 -346 -249 -125
TO= -346 -249 -125 100
COLOR= COLOR1 COLOR2 COLOR3 COLOR4
Eu estou supondo que pode haver mais linhas (mas não colunas) de dados, tanto na primeira quanto na segunda seção do arquivo, e que deve haver tantas COLOR
entradas na linha COLOR
. são valores de dados nas linhas FROM
e TO
na saída.
Linhas não numéricas são ignoradas pelo bloco !/^[0-9]/
.
Os dados repetidos na saída são selecionados pelo terceiro bloco ( $3 == ""
). Esse bloco cria uma string data
e uma col
com os valores apropriados. O arredondamento é executado usando sprintf()
com um formato especificando um número de ponto flutuante sem casas decimais.
Os valores mínimo e máximo são coletados da seção posterior do arquivo de entrada como o mínimo da segunda coluna e o máximo da terceira coluna.
O bloco END
imprime o relatório resultante.