Eu tenho um arquivo que relata todos os incidentes de alguma coisa e seu tamanho. Estou tentando resumir essas informações mesclando incidências consecutivas que podem ser identificadas pela coluna 3 de uma linha acima sendo igual à coluna 2 da linha abaixo (desde que a coluna 1 seja idêntica), a saída deve estar no mesmo formato, mas em vez de várias linhas para qualquer sequência consecutiva, eu o substituiria por uma única linha onde a coluna 2 seria o número mais baixo do agrupamento nessa coluna, a coluna 3 seria o número mais alto do agrupamento nessa coluna , e a coluna 4 seria a média de todos os números da coluna 4 desse agrupamento (arredondado para o número inteiro mais próximo).
Para ficar claro, a coluna um é um grupo específico, a coluna dois é uma posição inicial, a coluna 3 é uma posição final e a coluna 4 é o número de ocorrências.
Cada linha é única em sua combinação de colunas, as colunas são pré-classificadas pela coluna 1, depois pela coluna 2 e depois pela coluna 3. Nenhum número na coluna 2 deveria/seria ser o mesmo, nenhum número na coluna 3 deveria/seria ser o mesmo. A coluna 1 pode, e muitas vezes será, a mesma.
Estou tentando conseguir isso no awk, se possível, já tentei e falhei. Aqui está o que eu tentei:
awk 'BEGIN {OFS=","} NR==1 {print} NR>1 {if ($1==prev && $2==end+1) {sum+=$4; count++; end=$3} else {if (NR>2) {print prev, start, end, int(sum/count+0.5);}; prev=$1; start=$2; end=$3; sum=$4; count=1}} END {print prev, start, end, int(sum/count+0.5)}'
###### reformatted via "awk -o- '...script_body...'"
awk '
BEGIN {
OFS = ","
}
NR == 1 {
print
}
NR > 1 {
if ($1 == prev && $2 == end + 1) {
sum += $4
count++
end = $3
} else {
if (NR > 2) {
print prev, start, end, int(sum / count + 0.5)
}
prev = $1
start = $2
end = $3
sum = $4
count = 1
}
}
END {
print prev, start, end, int(sum / count + 0.5)
}'
Entrada de exemplo:
fgh1,45513382,45513383,43
fgh1,45513383,45513384,44
fgh1,45513384,45513385,44
fgh1,45513385,45513386,43
fgh1,45513386,45513387,43
fgh1,45513387,45513388,44
fgh2,63543512,63543513,44
fgh2,63543513,63543514,41
fgh2,63543514,63543515,44
fgh2,63543515,63543516,44
Exemplo de saída:
fgh1,45513382,45513388,44
fgh2,63543512,63543516,43