Распечатайте группу строк, если они содержат определенные строки

У меня есть файл (file 1), который выглядит так:

>C 0
0   4231aa, >A6_03412... at 1:4226:1:4240/95.44%
1   4240aa, >A5_01600... *
>C 1
0   4159aa, >FG1_03697... *
>C 2
0   3942aa, >A3_03045... at 1:3942:1:3945/96.50%
1   3945aa, >A4_03199... *
2   3942aa, >A7_02989... at 1:3942:1:3945/92.11%
3   3941aa, >A6_03202... at 1:1:1:1/96.35%

Я рассматриваю часть между двумя >C как подгруппу. Так, например, это подгруппа

 >C 0
 0  4231aa, >A6_03412... at 1:4226:1:4240/95.44%
 1  4240aa, >A5_01600... *

У меня есть другой файл (file 2), содержащий строки внутри подгруппы:

A6_03412
A4_03199
.....

Я хочу напечатать всю подгруппу которые содержат строку в file 2. Поэтому, учитывая, что в file 2 у меня есть только упомянутые строки, выход должен быть:

>C 0
0   4231aa, >A6_03412... at 1:4226:1:4240/95.44%
1   4240aa, >A5_01600... *
>C 2
0   3942aa, >A3_03045... at 1:3942:1:3945/96.50%
1   3945aa, >A4_03199... *
2   3942aa, >A7_02989... at 1:3942:1:3945/92.11%
3   3941aa, >A6_03202... at 1:1:1:1/96.35%

Это сложно, любое предложение, как это сделать с помощью скрипта bash?

1
задан 9 March 2015 в 22:36

1 ответ

Вот подход Python:

#!/usr/bin/env python2
with open('file_1') as f_1, open('file_2') as f_2:
    f_1_subgroups = f_1.read().split('>C')
    f_2_lines = [line.rstrip() for line in f_2]
    for subgroup in f_1_subgroups:
        for line in f_2_lines:
            if line in subgroup:
                print '>C' + subgroup

Здесь мы сначала разделили «file_1» на подгруппы, используя разделитель >C, затем мы искали строки «file_2» в подгруппа. Если найдено, мы напечатали подгруппу.

Использование списка:

#!/usr/bin/env python2
with open('file_1') as f_1, open('file_2') as f_2:
    f_1_subgroups = f_1.read().split('>C')
    f_2_lines = [line.rstrip() for line in f_2]
    print ''.join(['>C' + subgroup for line in f_2_lines for subgroup in f_1_subgroups if line in subgroup])
0
ответ дан 23 May 2018 в 22:34

Другие вопросы по тегам:

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