como comparar valores em duas colunas em dois arquivos diferentes, ecoando linhas inteiras onde o valor absoluto da diferença é um pequeno valor máximo?

2

Eu quero fazer uma comparação linha a linha de valores na coluna 6 de dois arquivos e, em seguida, fazer eco das linhas e do conteúdo completo delas, colocando-as em um arquivo combinado, digamos a linha de um arquivo e depois a linha do próximo arquivo imediatamente abaixo dele, todos separados por uma linha espaçadora, quando o valor absoluto da diferença nos valores na coluna 6 dos dois arquivos for menor que algum valor máximo pequeno, como < 0,001. Eu não iria ecoar ou imprimir todas as outras linhas onde o valor absoluto da diferença nos valores da coluna 6 é maior que 0,001, por exemplo, mas apenas os casos em que é < 0,001. Como eu faria isso?

    
por user93975 05.12.2014 / 22:46

2 respostas

3

awk '
  function abs(v) {
    return (v < 0 ? -v : v)
  }
  {l1=$0; f6_1=$6; getline < "file2"; l2=$0; f6_2=$6}
  abs(f6_1 - f6_2) < 0.001 {print l1 "\n" l2 "\n"}' file1
    
por 05.12.2014 / 23:03
1

Eu pré-processo com paste para intercalar as linhas e, em seguida, alimentar para awk

paste -d '\n' file1 file2 |
awk -v threshold=0.001 'NR % 2 {a=$6; b=$0; next};
$6 - a > -threshold && $6 - a  <threshold {print b; print ""; print $0}'
    
por 05.12.2014 / 23:01

Tags