awk zum Extrahieren eines bestimmten Musters in einer Datei basierend auf der Variablenübereinstimmung

awk zum Extrahieren eines bestimmten Musters in einer Datei basierend auf der Variablenübereinstimmung

Im awkFolgenden versuche ich, den Wert von zu extrahieren, RSTRINGbasierend darauf, wo der Wert einer anderen Variable $VCFin einem gefunden wird file. Der Wert von $VCFwurde bereits extrahiert und das RSTRINGsind derzeit alle Zeilen, die mit beginnen R_2019. Was ich erreichen möchte, ist, RSTRINGbasierend darauf festgelegt zu werden, wo $VCFes gefunden wurde. Danke :).

Datei

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

Wenn$VCF=19-0008-LastN-FirstN

gewünscht

RSTRING=R_2019_00_00_xxxx-000-v5.6_xxxxx

Wenn$VCF=19-0008-Las-Fir

gewünscht

RSTRING=R_2019_00_00_xxxx-00-v5.6_xxxxx

awk

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

Antwort1

Zwei Optionen:

  1. Lesen Sie die Datei Zeile für Zeile, setzen Sie ein Boolean-Flag, wenn Sie den VCF finden, und drucken Sie dann dienächsteRSTRING:

    awk -v ref="$VCF" '
        $0 ~ ref {have_vcf = 1}
        have_vcf && /^R_2019/ {print; have_vcf = 0}
    ' file
    
  2. Lesen Sie die Datei absatzweise. Wenn der aktuelle Datensatz den VCF enthält, drucken Sie das letzte Feld des Datensatzes:

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

verwandte Informationen