como comparar 2 colunas e colocar zero nessas linhas na segunda coluna se elas não tiverem correspondência com nenhuma das linhas da primeira coluna?

0

Eu tenho um arquivo parecido com:

arquivo1:

    id1 id6
    id5 id2
    id2 id3
    id6 id500

se compararmos o interior da segunda coluna com a primeira coluna, podemos notar que id6 e id2 existem na segunda coluna, assim como na primeira coluna. Mas id3 e id500 existem na segunda coluna enquanto não na primeira coluna. Eu quero substituir 0 para o último como eles não aparecem na primeira coluna. então a saída deve ser:

saída:

id1 id6
id5 id2
id2 0
id6 0

alguma sugestão? Eu tentei alguns comandos em "join", mas eu não consegui o que eu quero. note que meus dados reais são enormes e este é um pequeno exemplo

    
por zara 04.08.2016 / 21:25

2 respostas

1

Uma solução de duas passagens - na primeira passagem armazena todos os valores do campo 1 em uma matriz a , na segunda passagem imprime cada linha, com o segundo campo sendo definido como 0 se não estiver na matriz a

awk 'first{a[$1]; next}; {print $1, !($2 in a)? 0: $2}' first=1 file first=0 file
    
por 05.08.2016 / 06:28
-1
#/bin/perl

use strict;
use warnings;

my  %hash;
my  @array;
my( $key, $value );

while( <ARGV> )
{
    chomp;
    @array = split '\t';    
    $hash{ $array[0] } = $array[1];
}

while(( $key, $value ) = each %hash )
{
    printf "$key\t%s\n",
        exists( $hash{ $value }) ? $value : "0";
}

Não sei o que significa "enorme", independentemente do tamanho dos seus dados, é o quanto isso usa. Desculpe se você estava procurando solução de tipo de comando POSIX, eu nunca respondi a esses fóruns antes.

    
por 04.08.2016 / 22:31