Perl에서 awk를 사용하여 하위 문자열 일치 뒤에 나타나는 텍스트를 인쇄합니다.

Perl에서 awk를 사용하여 하위 문자열 일치 뒤에 나타나는 텍스트를 인쇄합니다.

아래와 같이 파일에 여러 문자열이 있습니다 MyFile.

1234|5|678|ABC|d|e| MyString - values: foo 1, bar 10%, baz 2/2, qux quux 10 sec, quuz 10km

1234 10 sec하위 문자열 일치를 기반으로 하위 문자열을 인쇄하는 방법 qux quux.

이것이 내가 시도한 것입니다 -grep -a "qux quux" MyFile | cut -d '|' -f 1,7 | awk '{print $1, " ",$13," ",$14}' |sed -e 's/|//' | sed -e 's/,//' > $output

그러나 문자열의 내용이 변경되면 위 명령은 결국 잘못된 값을 복사하게 됩니다.

감사해요.

답변1

awk만 사용하여 아래 쉼표 앞의 모든 항목을 캡처한다고 가정해 보겠습니다.

$ awk -F'|' -v r="qux quux " '
    match($0,r "[^,]*") {print $1, substr($0,RSTART+length(r),RLENGTH-length(r))}
  ' MyFile
1234 10 sec

GNU awk:

$ gawk -F'|' 'match($0,/qux quux ([^,]*)/,a) {print $1, a[1]}' MyFile
1234 10 sec

진주:

$ perl -F'\|' -lne 'print "$F[0] $1" if /qux quux ([^,]*)/' MyFile
1234 10 sec

관련 정보