awk para extrair um padrão específico no arquivo com base na correspondência de variáveis

awk para extrair um padrão específico no arquivo com base na correspondência de variáveis

Abaixo awkestou tentando extrair o valor de RSTRINGcom base em onde o valor de outra variável $VCFé encontrado em a file. O valor de $VCFjá foi extraído e RSTRINGatualmente são todas as linhas começando com R_2019. O que estou tentando obter é RSTRINGdefinido com base em onde $VCFfoi encontrado. Obrigado :).

arquivo

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

Se$VCF=19-0008-LastN-FirstN

desejado

RSTRING=R_2019_00_00_xxxx-000-v5.6_xxxxx

Se$VCF=19-0008-Las-Fir

desejado

RSTRING=R_2019_00_00_xxxx-00-v5.6_xxxxx

estranho

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

Responder1

Duas opções:

  1. lendo o arquivo linha por linha, defina um sinalizador booleano ao encontrar o VCF e imprima opróximoRSTRING:

    awk -v ref="$VCF" '
        $0 ~ ref {have_vcf = 1}
        have_vcf && /^R_2019/ {print; have_vcf = 0}
    ' file
    
  2. leia o arquivo por parágrafos. Se o registro atual contiver o VCF, imprima o último campo do registro:

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

informação relacionada