já respondeu parcialmente aqui - link
awk 'NR==FNR {arr[$2]=$2FS$3FS$4FS$5FS$6; next} {print $1,arr[$3]}' file1 FS="," file2
1 rs3094315 0 0 C T
Eu tenho estes dois arquivos:
file1.txt
0 rs3094315 0 0 C T
0 rs12562034 0 0 A G
0 rs3934834 0 0 C T
file2.txt
Chr,Pos,snp_name
1, 742429,rs3094315
Onde a primeira coluna do arquivo1 também é uma coluna Chr e deve ser substituída pela coluna file2 chr. No entanto, tem que corresponder snp para que se parece com isso:
file3
1 rs3094315 0 0 C T
O Arquivo2 possui números de linha e coluna diferentes.
já respondeu parcialmente aqui - link
awk 'NR==FNR {arr[$2]=$2FS$3FS$4FS$5FS$6; next} {print $1,arr[$3]}' file1 FS="," file2
1 rs3094315 0 0 C T
Usando join
e um shell que entende as substituições do processo:
$ join -t ' ' -1 2 -2 3 -o2.1,0,1.3,1.4,1.5,1.6 <( sort -k2 file1 ) <( tr ',' ' ' <file2 | sort -k3 )
1 rs3094315 0 0 C T
O segundo arquivo, file2
, tem um problema, pois usa um delimitador de campo diferente do primeiro arquivo, file1
. Isso é solucionado ao executar seu conteúdo por meio de tr
para substituir todas as vírgulas por espaços.
Os dois arquivos são classificados nos campos nos quais vamos juntar os dados; campo 2 no primeiro arquivo e campo 3 no segundo arquivo.
O join
lerá esses dois conjuntos de dados e os unirá nos campos separados por espaços especificados.
Os campos de saída são determinados pelo -o
flag, e escolhemos o primeiro campo do segundo arquivo, o campo de junção, seguido pelos campos de 3 a 6 do primeiro arquivo.
Tags merge awk join bioinformatics