Combine as três colunas em 2 arquivos de anotação e imprima essas linhas em um novo arquivo de saída

0

Eu tenho 2 arquivos, arquivo 1 e arquivo 2 com os mesmos números de coluna. A coluna um tem o número de cromossomos, a coluna dois tem o site de início do promotor e a coluna três tem o site de parada do promotor.

Eu quero corresponder ambos os arquivos, se uma correspondência para todas as três colunas no arquivo 1 for encontrada no arquivo 2. Eu quero gerar um arquivo de saída mostrando as três colunas exatas com um quarto. O quarto mostraria uma partida com uma pontuação de 1 e uma incompatibilidade com uma pontuação de 0.

Arquivo 1:

chr1 899 1098
chr3 677 900
chr3 844 1045

Arquivo 2:

chr3 844 1045
chr1 899 1098
chr4 500 789

Arquivo de saída:

chr1 899 1098  1
chr3 677 900   0
chr3 844 1045  1
chr4 500 789   0

Eu encontrei a resposta para combinar os arquivos e gerar um novo arquivo no mesmo fórum:

awk 'FNR==NR{a[$1,$2,$3]=$0;next}{if(b=a[$1,$2,$3]){print b}}' file1 file2

Mas também quero incluir a coluna de correspondência e pontuação no arquivo de saída.

    
por Maan 19.11.2015 / 11:53

1 resposta

0

script

#!/bin/bash
filea=$1
fileb=$2
fout=$3
sed -i "/^$/d" $filea $fileb
cat $filea | while read a b c
  do
    grep "$a.*$b.*$c" $fileb &>/dev/null && l="$a   $b  $c  1" || l="$a $b  $c  0"
    grep "$l" $fout &>/dev/null || echo "$l" >> $fout
  done
cat $fileb | while read a b c
  do
    grep "$a.*$b.*$c" $filea $fout &>/dev/null && l="$a $b  $c  1" || l="$a $b  $c  0"
    grep "$l" $fout &>/dev/null || echo "$l" >> $fout
  done

stdout

younes@cbfcdf:~$ cat filea
chr1 899 1098
chr3 677 900
chr3 844 1045
younes@cbfcdf:~$ cat fileb
chr3 844 1045
chr1 899 1098
chr4 500 789
younes@cbfcdf:~$ ./script filea fileb new_file
younes@cbfcdf:~$ cat new_file 
chr1    899     1098    1
chr3    677     900     0
chr3    844     1045    1
chr4    500     789     0
younes@cbfcdf:~$
    
por 19.11.2015 / 13:17

Tags