Usando um script awk
:
NR == FNR { seq[++n] = $1; next }
{
header = $0
getline
for (i = 1; i <= n; ++i) {
if (match(seq[i], $0) > 0) {
print header
next
}
}
print header
print
}
Executando:
$ awk -f script.awk file2 file1
1
GACGGAGGATGCAAGTGTTATCCGGAATCACTGGGCGTAAAGTTTTTTTTT
2
3
4
GACGGAGGATGCAAGTGTTATCCGGAATCACTGGGCCGTCCGTAG
O script lê primeiro as sequências 2000 de file2
na matriz seq
e, em seguida, lê o cabeçalho de file1
seguido pela sequência de file1
(usando getline
). Em seguida, ele passa pelo array seq
para encontrar uma seqüência que contém a seqüência atual de file1
. Se essa sequência for encontrada, o cabeçalho será impresso e o script continuará com a próxima linha em file1
. Caso contrário, o cabeçalho e a sequência são impressos.
O script pressupõe que file1
contém linhas de cabeçalho e sequência alternadas e absolutamente nenhuma sequência de várias linhas.
O seguinte é o mesmo script, mas usando o princípio DRY ("Não se repita"):
NR == FNR { seq[++n] = $1; next }
{
header = $0
getline
found = 0
for (i = 1; i <= n; ++i) {
if (match(seq[i], $0) > 0) {
found = 1
break
}
}
print header
if (!found) print
}