AWK - Comparando o valor de duas variáveis em dois arquivos diferentes

1

Eu tenho dois arquivos de texto A.txt e B.txt. Cada linha de A.txt A.txt

100
222
398

B.txt

1  2  103  2 
4  5  1026 74
7  8  209  55
10 11 122  78

O que estou procurando é um comando awk para fazer isso:

for each line of A 
    search B;
    if (the value of third column in a line of B - the value of the variable in A > 10)
        print that line of B;
    
por user208434 27.10.2013 / 20:21

2 respostas

1

O script a seguir deve resolver seu problema:

#!/bin/bash
A="$HOME/a.txt"
B="$HOME/b.txt"

cat $A | while read a; do
    cat $B | while read b; do
        b3=$(echo $b | awk ' { print  }')
        c=$(($b3 - $a))
        if (( $c > 10 )); then
            echo $b
        fi
    done
done

Não se esqueça de torná-lo executável usando o seguinte comando:

chmod +x script_name
    
por Radu Rădeanu 27.10.2013 / 21:04
0

Aqui está outra abordagem:

while read i; do awk -v i="$i" '-i>10' file2; done < file1

Explicação:

  • while read i; do ... ; done < file1 : itera através do arquivo um, salvando o valor encontrado lá (a linha inteira) como $i .
  • awk -v i=$i '-i>10' file2 : passa pelo arquivo2 e imprime cada linha em que o terceiro campo é menor que o valor atual de $i . O truque é passar a variável para o script awk com a opção -v var_name=value .

Note que esta resposta (e de Radu), irá imprimir cada linha que corresponde a cada variável. O resultado será muitas linhas duplicadas, para removê-las use sort :

while read i; do awk -v i="$i" '-i>10' file2; done < file1 | sort -u
    
por terdon 17.03.2014 / 02:26