awk 根據變數匹配提取檔案中的特定模式

awk 根據變數匹配提取檔案中的特定模式

awk下面,我嘗試根據在 a 中找到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

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

答案1

兩種選擇:

  1. 逐行讀取文件,找到 VCF 時設定一個布林標誌,然後列印下一個R字串:

    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
    

相關內容