Uma maneira de fazer isso com awk
:
awk 'NR==FNR && /^>Node/ {
$0 = ""
for(i=0; i<=4; i++) {
getline s <ARGV[2]
$0 = $0 s
}
}
NR==FNR' FileA FileB
Eu tenho dois arquivos A e B.
File A
>Node1
...
>Node2
...
File B
>gb|KY551314.1| Influenza A virus (A/mallard/Idaho/AH0011522/2015(H7N7)) segment
2 polymerase PB1 (PB1) and PB1-F2 protein (PB1-F2) genes,
complete cds
Length=2316
>gb|KY561069.1| Influenza A virus (A/American green-winged teal/Missouri/15OS6591/2015(H11N9))
segment 1 polymerase PB2 (PB2) gene, complete
cds
Length=2341
Como posso substituir cada linha NodeX do Arquivo A pelas entradas subsequentes no Arquivo B? O resultado seria semelhante ao seguinte:
File A
>gb|KY551314.1| Influenza A virus (A/mallard/Idaho/AH0011522/2015(H7N7)) segment 2 polymerase PB1 (PB1) and PB1-F2 protein (PB1-F2) genes, complete ads Length=2316
...
>gb|KY561069.1| Influenza A virus (A/American green-winged teal/Missouri/15OS6591/2015(H11N9)) segment 1 polymerase PB2 (PB2) gene, complete ads Length=2341
...
perl -lMautodie -pe 'BEGIN{ open FILE_B, "<", pop; }
s/^>Node.*// && do{for my $k (0..3) { s/$/<FILE_B> =~ s|\n| |r/e }}
' FileA FileB
-l
= > IFS=OFS=\n
, -p
= > arquivo implícito lido em loop + registros de autoprint. autodie
pragma incluído para resgatar erros.