Awk
solução:
awk '/^>/{ k=$1 FS $2 }
NR==FNR{
if (!/^>/) a[k]=(a[k]!="")? a[k] ORS $0: $0; next
}
k in a{
print $0 ORS a[k]; delete a[k]; next
}1' file1 file2
-
/^>/{ k=$1 FS $2 }
- ao encontrar a linha cabeçalho (por exemplo,>Feature ...
) - componha uma chavek
dos campos 1a$1
e 2$2
-
NR==FNR{ ... }
- processando o primeiro arquivo de entrada (file1
):-
if (!/^>/) a[k]=(a[k]!="")? a[k] ORS $0: $0
- acumula linhas sem cabeçalho na matriza
usando a chave atualk
-
next
- pula para o próximo registro
-
-
k in a
- se a chave atual baseada no registrofile2
estiver na matriza
(com base nos registrosfile1
):-
print $0 ORS a[k]
- imprime registros relacionados -
delete a[k]
- excluir item (ns) processado (s)
-
A saída:
>Feature scaffold1
1 100 g
101 200 g
201 300 g
500 500 r
900 1000 r
>Feature scaffold2
1 100 g
01 500 g
200 300 r
>Feature scaffold3
10 500 g
100 200 r
>Feature scaffold4
10 300 g
500 600 r
>Feature scaffold5
1 1000 r