변수 일치를 기반으로 파일에서 특정 패턴을 추출하는 awk

변수 일치를 기반으로 파일에서 특정 패턴을 추출하는 awk

아래 에서는 다른 변수의 값이 에서 발견되는 위치를 기반으로 awk의 값을 추출하려고 합니다 . 의 값은 이미 추출되었으며 은 현재 로 시작하는 모든 줄입니다 . 내가 얻으려는 것은 발견된 위치에 따라 설정됩니다 . 감사합니다 :).RSTRING$VCFfile$VCFRSTRINGR_2019RSTRING$VCF

파일

xxx_0000 19-0004-La-Fi
xxx_0001 19-0005-Last-Firs
xxx_0003 19-0008-LastN-FirstN
xxx_0005 190320-Control
R_2019_00_00_xxxx-000-v5.6_xxxxx

xxx_0007 19-0000-LastName-FirstName
xxx_0009 19-0001-Las-Fir
xxx_0011 190319-Control
R_2019_00_00_xxxx-00-v5.6_xxxxx

만약에$VCF=19-0008-LastN-FirstN

원하는

RSTRING=R_2019_00_00_xxxx-000-v5.6_xxxxx

만약에$VCF=19-0008-Las-Fir

원하는

RSTRING=R_2019_00_00_xxxx-00-v5.6_xxxxx

awk -v ref="$VCF" 'match($0, ref) {print "$RSTRING"}' file

답변1

두 가지 옵션:

  1. 파일을 한 줄씩 읽고 VCF를 찾을 때 부울 플래그를 설정한 다음다음RSTRING:

    awk -v ref="$VCF" '
        $0 ~ ref {have_vcf = 1}
        have_vcf && /^R_2019/ {print; have_vcf = 0}
    ' file
    
  2. 파일을 단락별로 읽으세요. 현재 레코드에 VCF가 포함되어 있으면 레코드의 마지막 필드를 인쇄합니다.

    awk -F '\n' -v RS="" -v ref="$VCF" '$0 ~ ref {print $NF}' file
    

관련 정보