下面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
两个选项:
逐行读取文件,找到 VCF 后设置一个布尔标志,然后打印下一个字符串:
awk -v ref="$VCF" ' $0 ~ ref {have_vcf = 1} have_vcf && /^R_2019/ {print; have_vcf = 0} ' file
按段落读取文件。如果当前记录包含 VCF,则打印记录的最后一个字段:
awk -F '\n' -v RS="" -v ref="$VCF" '$0 ~ ref {print $NF}' file