как получить строки между определенными словами по заданным двум файлам? - PullRequest
2 голосов
/ 28 октября 2019

У меня есть два файла 1 и 2. файл 1 содержит всю подробную информацию о метаболических путях, которые начинаются с C и D, и содержит большое количество C и D, в то время как файлы 2 содержат только указанную строку идентификатора с именем, начинающимся сC и имеют уникальные (в шорт-лист C, меньше по количеству). файлы выглядят так:

Файл 1:

C    00010 Glycolysis / Gluconeogenesis [PATH:smup00010]
D      SMPSPU_277 pfkA; 6-phosphofructokinase   K00850 pfkA; 6-phosphofructokinase 1 [EC:2.7.1.11]
D      SMPSPU_278 gapA; glyceraldehyde 3-phosphate dehydrogenase        K00134 GAPDH; glyceraldehyde 3-phosphate dehydrogenase [EC:1.2.1.12]
D      SMPSPU_274 acoA; pyruvate dehydrogenase E1 component subunit 
alpha       K00161 PDHA; pyruvate dehydrogenase E1 component alpha subunit 
[EC:1.2.4.1]
D      SMPSPU_172 korA; 2-oxoglutarate ferredoxin oxidoreductase subunit alpha  K00174 korA; 2-oxoglutarate/2-oxoacid ferredoxin oxidoreductase subunit alpha [EC:1.2.7.3 1.2.7.11]
D      SMPSPU_061 korB; 2-oxoglutarate ferredoxin oxidoreductase subunit beta   K00175 korB; 2-oxoglutarate/2-oxoacid ferredoxin oxidoreductase subunit beta [EC:1.2.7.3 1.2.7.11]
C    00020 Citrate cycle (TCA cycle) [PATH:smup00020]
D      SMPSPU_201 sucA; 2-oxoglutarate dehydrogenase, E1 component      K00164 OGDH; 2-oxoglutarate dehydrogenase E1 component [EC:1.2.4.2]
D      SMPSPU_120 lpdA; dihydrolipoamide dehydrogenase  K00382 DLD; dihydrolipoamide dehydrogenase [EC:1.8.1.4]
D      SMPSPU_172 korA; 2-oxoglutarate ferredoxin oxidoreductase subunit alpha  K00174 korA; 2-oxoglutarate/2-oxoacid ferredoxin oxidoreductase subunit alpha [EC:1.2.7.3 1.2.7.11]
D      SMPSPU_169 sucD; succinyl-CoA synthetase subunit alpha   K01902 sucD; succinyl-CoA synthetase alpha subunit [EC:6.2.1.5]
D      SMPSPU_229 pdhB; pyruvate dehydrogenase E1 component subunit beta        K00162 PDHB; pyruvate dehydrogenase E1 component beta subunit [EC:1.2.4.1]
D      SMPSPU_275 pdhC; dihydrolipoamide acyltransferase E2 component   K00627 DLAT; pyruvate dehydrogenase E2 component (dihydrolipoamide acetyltransferase) [EC:2.3.1.12]
C    00030 Pentose phosphate pathway [PATH:smup00030]
D      SMPSPU_057 tktB; transketolase, N-terminal subunit       K00615 E2.2.1.1; transketolase [EC:2.2.1.1]
D      SMPSPU_058 tktA; transketolase, C-terminal subunit       K00615 E2.2.1.1; transketolase [EC:2.2.1.1]
C    00051 Fructose and mannose metabolism [PATH:smup00051]
D      SMPSPU_277 pfkA; 6-phosphofructokinase   K00850 pfkA; 6-phosphofructokinase 1 [EC:2.7.1.11]
D      SMPSPU_230 fbaA; fructose-bisphosphate aldolase  K01624 FBA; fructose-bisphosphate aldolase, class II [EC:4.1.2.13]

файл 2:

C    00261 Monobactam biosynthesis [PATH:smup00261]
C    00300 Lysine biosynthesis [PATH:smup00300]
C    00660 C5-Branched dibasic acid metabolism [PATH:smup00660]
C    00680 Methane metabolism [PATH:smup00680]
C    02020 Two-component system [PATH:smup02020]
C    02024 Quorum sensing [PATH:smup02024]

Теперь я хочучтобы извлечь только те C и их соответствующие D, которые присутствуют в файле 2.

Я пробовал этот скрипт

fgrep -f name-C-non-homowba00001 wba00001.keg |grep -E '^C.*PATH|^D' | less

, но я даю мне эти файлы идентификатора C и имена.

Ответы [ 3 ]

0 голосов
/ 28 октября 2019
awk '$1!~/^D$/ { select=0; } $1=="C" && $NF~/PATH/ { select=1; } {if(select) print; }' inputfile

Объяснение:

$1!~/^D$/ { select=0; } Строка, отличная от D, прекращает вывод.
$1=="C" && $NF~/PATH/ { select=1; } A C Строка, содержащая PATH в последнем поле, начинает вывод.
{if(select) print; } Печать текущей строки, если она выбрана для вывода.

0 голосов
/ 08 ноября 2019

Это безопасный метод:

awk '(NR==FNR){a[$0];next}/^C/{p=($0 in a)}p' file2 file1
0 голосов
/ 28 октября 2019

Попробуйте:

cat input | grep -E '^[CD]' | sed -n '/^C.*PATH/,/^C/p' | uniq -f2 | grep -E '^C.*PATH|^D'

, где:

  • input - это ваш файл
  • first grep печатает все строки, начинающиеся с C или D
  • sed печатает все строки от одной, начинающейся с C и содержащей PATH, до следующей, начинающейся с C (включается)
  • uniq подавляет все смежные строки, которые равны, кроме первой2 поля
  • last grep печатает все строки, начинающиеся с C и содержащие PATH или начинающиеся с D
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...