パターンマッチング後、N行目の値を抽出しようとしています'kappa (ts/tv) ='
。次のコマンドを使用してawkを使用しています。
awk '/kappa (ts/tv) =/{print $NF}' text.txt
しかし、エラーが発生しました。
awk: cmd. line:1: error: Unmatched ( or \(: /kappa (ts/
「sed」を使用してもこのエラーが発生します。ここに正規表現の内容が欠けていることを知っています。
誰でもどんな提案をすることができますか?
答え1
そこに2つの質問があります。まず、一致演算子を/
区切り文字として使用します。しかし、探しているパターンには/
。
/kappa (ts/tv) =/
/kappa (ts/
次のように解釈されると、tv) =/
構文エラーが発生します。脱出/
して成功しなければなりません\/
。次に、括弧は正規表現の文脈で特別な意味を持ちます(一部とにかく正規表現スタイル):一致するグループをキャプチャするために使用されます。したがって、必要なタスクを実行するにはエスケープも必要です。これらすべてを総合すると、次のようになります。
awk '/kappa \(ts\/tv\) =/{print $NF}' text.txt
答え2
これには2つの間違いがあります。角かっことスラッシュはエスケープする必要があります。全体として、次のようになります。
awk '/kappa \(ts\/tv\) =/ {print $NF}' text.txt
答え3
あなたの質問は十分に明確ではありません。私の答えはあなたの声明に基づいています。
「パターンマッチング後、N行目の値を抽出してみてください...」
awk -v line_num_after_match=1 '
NR==seen+line_num_after_match && seen { print; seen=0; };
/kappa \(ts\/tv\) =/ && !seen { seen=NR; }' infile
次の入力から実行します。
line 1
line 2
line 3
line 4: kappa (ts/tv) =
line 5: another kappa (ts/tv) = but line 1 after match
line 6: but line 2 after first match and line 1 after second match
line 7: but line 3 after first match and line 2 after second match
line 8: yet another kappa (ts/tv) =
line 9: xxxxxxxx
返品:
line 5: another kappa (ts/tv) = but line 1 after match
line 6: but line 2 after first match and line 1 after second match
line 9: xxxxxxxx
答え4
sed コマンド
sed -n '/kappa (ts\/tv) =/p' filename
Python
#!/usr/bin/python
import re
l=re.compile(r'kappa \(ts\/tv\) =')
m=open('filename','r')
for h in m:
if re.search(l,h):
print h.strip()
~