패턴과 일치하는 행에서 값 추출

패턴과 일치하는 행에서 값 추출

패턴 매칭 후 N번째 행의 값을 추출하려고 합니다 'kappa (ts/tv) ='. 다음 명령을 사용하여 awk를 사용하고 있습니다.

awk '/kappa (ts/tv) =/{print $NF}' text.txt

하지만 오류가 발생해요

awk: cmd. line:1: error: Unmatched ( or \(: /kappa (ts/

"sed"를 사용할 때도 이 오류가 발생합니다. 여기에 정규식에 대한 내용이 누락되어 있다는 것을 알고 있습니다.

누구든지 어떤 제안을 할 수 있습니까?

답변1

거기에 두 가지 질문이 있습니다. 먼저 일치 연산자가 /구분 기호로 사용됩니다. 그러나 찾고 있는 패턴에는 /.

/kappa (ts/tv) =/

/kappa (ts/다음 으로 해석되면 tv) =/구문 오류가 발생합니다. 탈출 /해서 성공 해야 합니다 \/. 다음으로, 괄호는 정규식의 맥락에서 특별한 의미를 갖습니다(일부어쨌든, 정규식 스타일): 일치하는 그룹을 캡처하는 데 사용됩니다. 따라서 원하는 작업을 수행하려면 이스케이프도 필요합니다. 이 모든 것을 종합하면 다음과 같습니다.

awk '/kappa \(ts\/tv\) =/{print $NF}' text.txt

답변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

파이썬

#!/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()

~

관련 정보