Pessoalmente, acho que para esse tipo de tarefa é melhor usar uma linguagem de programação "real". Eu gosto de Python, então aqui está um script Python que faz o que você quer (é intencionalmente detalhado para que você possa entendê-lo e modificá-lo facilmente):
#!/usr/bin/env python2
# intersect.py
# Read data from the first file
snp_rows = []
with open("snp.bed", 'r') as snp_file:
for row in snp_file:
snp_rows.append(row.split())
# Read data from the second file
int_rows = []
with open("intersect.bed", 'r') as int_file:
for row in int_file:
int_rows.append(row.split())
# Compare data and compute results
results = []
for row in int_rows:
if row[:4] in snp_rows:
results.append(row[:4] + [row[-1]])
else:
results.append(row[:4] + ["NA"])
# Print the results
for row in results:
print(' '.join(row))
Salve-o em um arquivo e execute-o:
python2 intersect.py
E só por diversão, aqui está uma solução Bash usando comandos padrão (apenas grep
e cut
):
while read row; do
match="$(grep -F "${row}" intersect.bed)";
if [[ -n "${match}" ]]; then
echo "${row} $(echo ${match} | cut -d' ' -f8)";
else
echo "${row} NA";
fi;
done < snp.bed
Observe que, em geral, não é recomendado usar o Bash para fazer um processamento de texto sério. Veja, por exemplo, o seguinte post: