comparação das duas tabelas linha por linha

0

Eu preciso comparar uma coluna por segundo em duas tabelas linha por linha. Tabelas: 1.csv

1a  2
14  4g

2.csv

1a  2
1  4

Script:

#!/bin/bash
text1=$(cat "1.csv" | awk '{print $2}')
text2=$(cat "2.csv" | awk '{print $2}')

if [[ "$text1" == "$text2" ]]
then
echo "true"
else
echo "false"
fi

Mas obtenho apenas um resultado - falso.

Por que recebo apenas um resultado - falso? deve ser verdadeiro (2 = 2) falso (4g! = 4)

    
por Oleksii 16.10.2016 / 16:22

2 respostas

2

Tente:

paste 1.csv 2.csv | awk '$2 == $4 {print "true"; next} {print "false"}'

Exemplo:

$ paste 1.csv .csv | awk '$2 == $4 {print "true"; next} {print "false"}'
true
false

O comando paste combina linhas dos arquivos fornecidos a ele, então eu obtenho a linha 'do primeiro arquivo e a linha 1 do segundo arquivo na primeira linha de saída e assim por diante:

$ paste f1 f2
1a  2   1a  2
14  4g  1  4

Isso permite comparar diretamente os campos em awk , que podem então imprimir a string desejada.

O comando next em awk pula para a próxima linha sem processar comandos adicionais, portanto, não preciso gravar a condição $2 != $4 para o segundo bloco.

    
por muru 16.10.2016 / 16:29
1

com awk :

awk 'NR==FNR {a[NR]=$2; next}; a[FNR]==$2 {print "true"; next} \
                                            {print "false"}' f1.csv f2.csv
  • {a[NR]=$2; next} será executado apenas para o primeiro arquivo, f1.csv , uma matriz a será criada com a chave como número da linha e valor como o valor correspondente do segundo campo para o registro

  • a[FNR]==$2 {print "true"; next} {print "false"} verifica se o valor da matriz a para o número da linha correspondente de f2.txt é igual ao segundo campo, caso positivo, true é impresso senão false é impresso

Exemplo:

% cat f1.csv 
1a  2
14  4g

% cat f2.csv                                                                                                                  
1a  2
1  4

% awk 'NR==FNR {a[NR]=$2; next}; a[FNR]==$2 {print "true"; next} {print "false"}' f1.csv f2.csv  
true
false
    
por heemayl 16.10.2016 / 16:40