無題

how to Check multiple conditions on multiple line belonging to variable size block of lines and return the main line – StackOverflow

これをみてふと思ったのは,Pythonの辞書型で部分一致ができればなあと思う事がある.
ちょいちょい思って,調べて,何かをみつけた様な記憶はあるけど,
自分の中に活きてはいないので意味がないという.
PandasやNetworkxを用いて,それに近いものは実装できるけど.

取り敢えず,今の場合は2重ループで効率は悪くても,
以下の様な適当な感じで良いと思うな.

Pythonの場合

import re


strings = """**A: lorem ipsum verade(unique)**
 a: asd
 b: asd

 c: alsd
 d: def

**B: korem ipsum vladmir(unique)**
 c: fdh
 e: asd

**C: lorum ipsum vladmir(unique)**
 a: asd
 b: asd

 d: def
 e: asd"""

key = ['a:asd', 'd:def']
for line in re.split(r'\n(?=[*]{2})', strings):
  lst = line.replace(' ', '').splitlines()
  if all(k in lst[1:] for k in key):
    res = lst[0]
    print(res[res.index(':')-1])
A
C

Awkの場合

%%bash
time {
echo """**A: lorem ipsum verade(unique)**
 a: asd
 b: asd

 c: alsd
 d: def

**B: korem ipsum vladmir(unique)**
 c: fdh
 e: asd

**C: lorum ipsum vladmir(unique)**
 a: asd
 b: asd

 d: def
 e: asd""" |
awk 'BEGIN{FS=OFS="\n";s1="a: asd";s2="d: def"}
  /[*]+/{h=substr($0, index($0, ":")-1, 1);k1=k2=0;next}
  $0~s1{k1=1}
  $0~s2{k2=1}
  k1 && k2{print h;k1=k2=0;next}'
}
A
C

real    0m0.006s
user    0m0.003s
sys 0m0.004s
カテゴリー: 未分類 パーマリンク