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 chavekdos campos 1a$1e 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 matrizausando a chave atualk -
next- pula para o próximo registro
-
-
k in a- se a chave atual baseada no registrofile2estiver 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