У меня есть файл (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?
Вот подход 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])