Calcular intervalo se o valor nas alterações da coluna

0

Não estou acostumado a codificar, mas para meu trabalho preciso fazer alguns processamentos com arquivos de texto e preciso de ajuda com um problema que encontrei.

Eu tenho um arquivo com duas colunas contendo alguns números:

180.000000   115.944480
180.000000    95.979157 
180.000000    93.583322 
178.593750   122.797168 
178.593750   120.000000 
178.593750   117.279613 
178.593750   102.024699 
178.593750    99.594068
   ...           ...

Existem vários valores na segunda coluna associados a um valor único na primeira coluna. Agora quero imprimir para cada valor único na coluna 1 o intervalo de valores na coluna 2.

Saída desejada:

115.944480 93.583322
122.797168 99.594068
...
Obviamente eu tenho que armazenar os valores e tem que imprimir um valor anterior e recente da coluna 2 se o valor na coluna 1 for alterado. Mas esse é o problema: como isso pode ser realizado em bash ou awk?

    
por quadrupoltensor 23.04.2018 / 09:23

1 resposta

0

Awk solução para sua condição inicial "para cada valor único na coluna 1 o intervalo de valores na coluna 2" (como você alterou consideravelmente sua condição) :

awk 'NR > 1{ 
         if ($1 == num1) intvl += num2 - $2;
         else { print intvl; intvl = 0 }
    }
    { num1 = $1; num2 = $2 }
    END{ print intvl }' file

Exemplo de saída:

22.3612
23.2031

Cobertura da segunda condição "para imprimir um valor anterior e um valor recente da coluna 2 se o valor na coluna 1 mudar" :

awk '!a[$1]++{ 
         if (first != "") { print first, last; first = last = "" }
         first = $2
     }
     { last = $2 }
     END{ print first, last }' file

A saída:

115.944480 93.583322
122.797168 99.594068
    
por 23.04.2018 / 09:39

Tags