Awk
solução:
awk '/Start|End|Done|dimen/{ print }
/echo "New Cell"/{
if (f) {
if (max >= 35) {
for (i=1; i<=c; i++) print a[i];
print
}
delete a; c=max=0
}
f=1
}f{ a[++c]=$0; if ($5 > max) max=$5 }' file
Detalhes:
-
/Start|End|Done|dimen/{ print }
- imprime linhas contendoStart
ouEnd
ouDone
oudimen
substring como são -
/echo "New Cell"/{ ... }
- ao encontrar linha com o padrãoecho "New Cell"
:-
if (f) { ... }
- se não for a linha do primeiro padrão e a seção anterior foi processada:-
if (max >= 35)
- se o máximo entre os valores do quinto campo na seção recente for maior de igual a35
:-
for (i=1; i<=c; i++) print a[i]
- imprime todas as linhas da seção recente (c
é o último índice da matriza
e aponta para o tamanho da matriz)
-
-
delete a
- limpe a matriza
(exclua todos os itens da matriza
) -
c=max=0
- redefine as variáveis cruciais
-
-
f=1
- sinalizador ativado e indicando seção ativa (um monte de linhas) para processamento
-
-
f{ ... }
- na seção ativa sendo processada:-
a[++c]=$0
- captura cada registro / linha$0
com uma seção no arraya
. A matriz é indexada com números consecutivos por++c
-
if ($5 > max) max=$5
- determinando o valor máximomax
entre os valores do 5º campo$5
dentro de um grupo de registros processados
-
A saída:
echo "Start 2A25.20090401.64809.7.HDF 6420 6751"
echo "dimensions 9249 49"
echo "New Cell"
grep "6621,38" out.2A25.20090401.64809.7.HDF.txt.text = 36.58 7.52 77.82 210
grep "6623,41" out.2A25.20090401.64809.7.HDF.txt.text = 28.62 7.59 77.96 210
grep "6624,40" out.2A25.20090401.64809.7.HDF.txt.text = 33.74 7.52 77.96 210
grep "6624,41" out.2A25.20090401.64809.7.HDF.txt.text = 42.25 7.56 77.99 210
grep "6625,41" out.2A25.20090401.64809.7.HDF.txt.text = 30.58 7.54 78.02 210
grep "6627,40" out.2A25.20090401.64809.7.HDF.txt.text = 34.5 7.46 78.05 200
grep "6628,39" out.2A25.20090401.64809.7.HDF.txt.text = 35.57 7.40 78.05 200
grep "6628,40" out.2A25.20090401.64809.7.HDF.txt.text = 44.82 7.44 78.08 200
grep "6628,41" out.2A25.20090401.64809.7.HDF.txt.text = 21.35 7.47 78.11 210
grep "6629,40" out.2A25.20090401.64809.7.HDF.txt.text = 26.67 7.41 78.11 210
grep "6630,41" out.2A25.20090401.64809.7.HDF.txt.text = 28.12 7.43 78.17 210
grep "6631,40" out.2A25.20090401.64809.7.HDF.txt.text = 21.4 7.37 78.17 272
grep "6631,41" out.2A25.20090401.64809.7.HDF.txt.text = 47.3 7.41 78.20 200
grep "6631,42" out.2A25.20090401.64809.7.HDF.txt.text = 27.42 7.45 78.22 210
grep "6632,41" out.2A25.20090401.64809.7.HDF.txt.text = 39.42 7.39 78.23 200
grep "6632,42" out.2A25.20090401.64809.7.HDF.txt.text = 26.53 7.42 78.25 210
grep "6632,43" out.2A25.20090401.64809.7.HDF.txt.text = 27.72 7.46 78.28 210
grep "6632,44" out.2A25.20090401.64809.7.HDF.txt.text = 41.01 7.50 78.31 210
grep "6631,44" out.2A25.20090401.64809.7.HDF.txt.text = 34.26 7.52 78.28 210
grep "6632,45" out.2A25.20090401.64809.7.HDF.txt.text = 23.02 7.54 78.33 210
grep "6633,41" out.2A25.20090401.64809.7.HDF.txt.text = 32.5 7.36 78.26 272
grep "6633,42" out.2A25.20090401.64809.7.HDF.txt.text = 32.82 7.40 78.28 210
grep "6633,43" out.2A25.20090401.64809.7.HDF.txt.text = 39.28 7.44 78.31 210
grep "6634,41" out.2A25.20090401.64809.7.HDF.txt.text = 26.09 7.34 78.29 272
grep "6634,42" out.2A25.20090401.64809.7.HDF.txt.text = 41.54 7.38 78.31 210
grep "6634,43" out.2A25.20090401.64809.7.HDF.txt.text = 42.26 7.42 78.34 210
grep "6635,42" out.2A25.20090401.64809.7.HDF.txt.text = 31.53 7.36 78.34 210
grep "6635,43" out.2A25.20090401.64809.7.HDF.txt.text = 34.19 7.40 78.37 210
grep "6636,43" out.2A25.20090401.64809.7.HDF.txt.text = 29.9 7.37 78.40 292
echo "New Cell"
echo "New Cell"
grep "6646,47" out.2A25.20090401.64809.7.HDF.txt.text = 27.52 7.31 78.81 210
grep "6647,47" out.2A25.20090401.64809.7.HDF.txt.text = 38.67 7.29 78.84 210
grep "6648,47" out.2A25.20090401.64809.7.HDF.txt.text = 37.08 7.27 78.87 210
echo "New Cell"