Comparando duas colunas com duas colunas

4

Eu tenho um arquivo que preciso comparar os valores em duas colunas com outras duas colunas. Por exemplo:

Item  A     B     C    D
1    201  3101   3101 201
2   3101   201    202 3101  
3   3101   201    201 3102 
4   3101   201   3202 202 

Então, o que estou tentando fazer é comparar a coluna A & B para C & D , mas valores na coluna A & B e C & D são intercambiáveis. E eu gostaria de ter uma saída como 2 se ambos os valores forem os mesmos, 1 se apenas um for compatível e 0 se ambos não forem partida. A resposta seria algo como isto

Item  A     B     C      D   Output
1    201  3101   3101   201    2
2   3101   201    202  3101    1
3   3101   201    201  3102    1
4   3101   201   3202   202    0

Como eu poderia conseguir isso?

    
por charles 18.02.2013 / 09:01

2 respostas

5

Esse awk onliner te aproxima muito da saída desejada (pelo menos os números estão corretos).

awk '{n=0} $2==$4 {n=n+1} $2==$5 {n=n+1} $3==$4 {n=n+1} $3==$5 {n=n+1} {print $0, n}' inputfile

Básico awk é usado aqui. A string entre aspas é executada para cada linha, enquanto o bloco entre colchetes é executado apenas quando a declaração na frente dela é verdadeira. $i refere-se à i-ésima coluna.

    
por 18.02.2013 / 09:20
3

Outra resposta awk , a parte principal é a mesma. Este é um script awk e mais legível

#!/bin/awk -f

BEGIN{ print "Item  A   B   C   D   Output"}
{
    count=0;
    if($2==$4) count+=1;
    if($2==$5) count+=1;
    if($3==$4) count+=1;
    if($3==$5) count+=1;
    if(NR != 1)
        print $1 "\t" $2 "\t" $3 "\t" $4 "\t" $5 "\t" count
}
END{} #Done

Link útil para o script awk

    
por 18.02.2013 / 09:52