変数の一致に基づいてファイル内の特定のパターンを抽出する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

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

答え1

2 つのオプション:

  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
    

関連情報