我有一个文件,其中的行如下:
intergenic NONE(dist=NONE),ENSG00000223972(dist=1692) 1 10177 10177 - C 1 10177 rs367896724 A AC 100 PASS AC=2130;AF=0.425319;AN=5008;NS=2504;DP=103152;EAS_AF=0.3363;AMR_AF=0.3602;AFR_AF=0.4909;EUR_AF=0.4056;SAS_AF=0.4949;AA=|||unknown(NO_COVERAGE);VT=INDEL
我想要做的是使用开始和结束字符提取我需要的部分。所以我想提取AFR_AF
的值。我所知道的是,此值以AFR_AF
开头,以;
结尾(整个内容如下:AFR_AF=0.4909;
所以我想要0.4909
。
如果可能的话,我想提取每一行的多个部分。这可能是使用像awk这样的东西吗?
答案 0 :(得分:1)
o
和P
的grep应该会有所帮助:
grep -oP 'AFR_AF=\K[^;]*` file
或者您希望在一个短片中使用多个值,例如:
grep -oP '(AFR_AF=|VT=)\K[^;]*' file
将给出
0.4909
INDEL
答案 1 :(得分:1)
awk
的便携式解决方案:
# extract.awk
BEGIN {
FS="="
RS=";"
search["AFR_AF"]=1
# Add more items as you wish
search["FOO_BAR"]=1
search["HELLO_WORLD"]=1
}
$1 in search {
print $2
}
像这样运行:
awk -f extract.awk input.file
<强>解释强>
使用;
作为记录分隔符(RS
),awk
会看到这样的记录(而不是逐行):
foo=bar
hello=world
no equal sign in this record
...
由于我们将字段分隔符(FS
)设置为=
,我们可以检查第一个字段$1
是否包含特定值并打印该值在这种情况下$2
。
搜索本身已使用关联数组实现。 $1 in search
检查$1
是否是该数组的键。