Adiciona coluna a um arquivo CSV como uma função de outras duas colunas, uma de outro arquivo

0

Aqui está a situação:

a.csv

Contém valores de alguns sensores capturados a cada 1 segundo, a última coluna é a época (eles realmente se parecem com 1453998477.044 ).
(* s são os valores dos sensores).

Exemplo:

* , * , * , 2.356
* , * , * , 3.356
* , * , * , 4.356
* , * , * , 5.356
* , * , * , 6.356
* , * , * , 7.356
* , * , * , 8.356

b.csv

Tenha um número fixo de épocas (uma por linha) indicando o momento em que uma determinada parte do programa foi iniciada / finalizada, de modo que as épocas são classificadas de forma ascendente.

No próximo exemplo, o programa tem duas partes, começou em 2.421 e terminou a primeira parte em 5.500 , depois a outra parte foi concluída em 8.012 .

2.421
5.500
8.012

O problema

A ideia é adicionar uma coluna a a.csv com estas propriedades:

  1. Por padrão, ele é preenchido com zeros.
  2. Em cada linha em que a época é a mais próxima de algumas épocas de exibição / finalização em b.csv , ela deve ter 1.

Seguindo os exemplos acima, o resultado desejado é este:

* , * , * , 2.356 , 1
* , * , * , 3.356 , 0
* , * , * , 4.356 , 0
* , * , * , 5.356 , 1
* , * , * , 6.356 , 0
* , * , * , 7.356 , 0
* , * , * , 8.356 , 1

PS: O problema em si é uma questão geral, mas foi difícil para mim explicá-lo em termos gerais, por isso usei um caso específico

Obrigado rapazes

    
por onlycparra 03.02.2016 / 15:31

1 resposta

0

Comando:

awk 'NR==FNR {values[NR]=$1; next;}
    { if (values[1]>values[2]) newvalue=0; else newvalue=1;
      print $0 "," newvalue; }' b.csv a.csv

Saída:

*,*,*,1,1
*,*,*,2,1
*,*,*,3,1
    
por 03.02.2016 / 16:10