Найти и заменить строки в текстовом файле выводом из другого файла

У меня есть два файла A и 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

Как я могу заменить каждую строку NodeX в Файл A с последующими записями в файле B? Результат будет выглядеть следующим образом:

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
...
0
15.05.2017, 21:52
2 ответа
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

Объяснение

  • Опции Perl: -l => IFS=OFS=\n, -p => неявное чтение файла в цикле + автопечать записи.
  • прагма autodie включена для спасения при ошибках.
  • открываем FileB
  • для сопоставления строк >Узел в начале FileA, мы читаем FileB 4 раза и удаляем новые строки.
0
28.01.2020, 02:33

Один из способов сделать это с помощью awk:

awk 'NR==FNR && /^>Node/ {
    $0 = ""
    for(i=0; i<=4; i++) {
        getline s <ARGV[2]
        $0 = $0 s
    }
}
NR==FNR' FileA FileB
2
28.01.2020, 02:33

Теги

Похожие вопросы