Combinando cinco colunas em dois arquivos usando o Awk

5

Eu tenho dois arquivos de entrada.

Arquivo1:

s2/80   20      .       A       T       86      F=5;U=4
s2/20   10      .       G       T       90      F=5;U=4
s2/90   60      .       C       G       30      F=5;U=4

Arquivo2:

s2/90   60      .       G       G       97      F=5;U=4
s2/80   20      .       A       A       20      F=5;U=4
s2/15   11      .       A       A       22      F=5;U=4
s2/90   21      .       C       C       82      F=5;U=4
s2/20   10      .       G       .       99      F=5;U=4
s2/80   10      .       T       G       11      F=5;U=4
s2/90   60      .       G       T       55      F=5;U=4

Resultado esperado:

s2/80  20 . A   T   86  F=5;U=4  s2/80  20  . A   A   20     F=5;U=4
s2/20  10 . G   T   90  F=5;U=4  s2/20  10  . G   .   99     F=5;U=4

Lógica: Eu quero todas as linhas de arquivo1 e arquivo2 concatenadas no arquivo de saída: Condições: Se a Coluna 1, 2, 4 do Arquivo1 e Arquivo2 corresponder exatamente e se a Coluna 5 do Arquivo2 tiver um ponto, ou seja, "." ou se corresponder exatamente à Coluna 4 do arquivo2.

Código: Eu tentei usar o script:

BEGIN{}
FNR==NR{
k=$1" "$2
a[k]=$4" "$5
b[k]=$0
c[k]=$4
d[k]=$5
next
}

{ k=$1" "$2
lc=c[k]
ld=d[k]
# file1 file2
if ((k in a) && ($4==$5) && (lc==$4)) print b[k]" "$0
}

Mas recebo uma saída de:

s2/80  20 . A   T   86  F=5;U=4  s2/80  20  . A   A   20     F=5;U=4

Considerando que minha saída deve ser:

s2/80  20 . A   T   86  F=5;U=4  s2/80  20  . A   A   20     F=5;U=4
s2/20  10 . G   T   90  F=5;U=4  s2/20  10  . G   .   99     F=5;U=4

Eu apreciaria sua ajuda. Obrigado.

    
por Namrata 31.10.2013 / 15:13

1 resposta

7
awk '
    {
        key = $1 SUBSEP $2 SUBSEP $4
    }
    # here, we are reading file1
    NR == FNR {
        f1_line[key] = $0 
        next
    }
    # here, we are reading file2
    key in f1_line && ($5 == "." || $5 == $4) {
        print f1_line[key], $0
    }
' file1 file2

saídas

s2/80   20      .       A       T       86      F=5;U=4 s2/80   20      .       A       A       20      F=5;U=4
s2/20   10      .       G       T       90      F=5;U=4 s2/20   10      .       G       .       99      F=5;U=4
    
por 31.10.2013 / 15:46

Tags