awk для извлечения определенного шаблона из файла на основе соответствия переменных

awk для извлечения определенного шаблона из файла на основе соответствия переменных

Ниже awkя пытаюсь извлечь значение RSTRINGна основе того, где найдено значение другой переменной $VCFв file. Значение $VCFуже извлечено, и RSTRINGв настоящее время все строки начинаются с R_2019. Я пытаюсь получить RSTRINGустановку на основе того, где $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, а затем печатаемследующийСТРОКА:

    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
    

Связанный контент