AWK用于可变长度文件的多个模式

时间:2019-04-12 11:39:23

标签: awk

我正在尝试搜索多个模式,以查找前几个字符的开头和结尾。这适用于单个模式。

com.google.cloud.teleport

如何处理多种模式?该文件不是基于列而是基于定界符。谢谢。

这是一行的示例。

awk '/test_pattern/ { match($0, /test_pattern/); print substr($0, RSTART - 10, RLENGTH + 20);' file

我正在尝试获取以AC,AF和AN开头的所有内容。同时,如果可能,我希望前两列。

预期输出:

X;Y;AC=1;AN=31388;AF=3.18593e-05;0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|AC_CAT=4.5;X;X;X;X;AC_DOG=4.6; X;X;X;AC_PUT=5.4

谢谢。

2 个答案:

答案 0 :(得分:2)

我认为您自从在问题AN=中说了之后就无意中将I am trying to get everything that begins with AC, AF and AN列留在了预期的输出中,而实际上您只希望打印所有name=value列。如果是这样:

$ cat tst.awk
BEGIN { FS="[;|]"; OFS="\t" }
{
    printf "%s%s%s", $1, OFS, $2
    for (i=3; i<=NF; i++) {
        if ($i ~ /=/) {
            printf "%s%s", OFS, $i
        }
    }
    print ""
}

$ awk -f tst.awk file
X       Y       AC=1    AN=31388        AF=3.18593e-05  AC_CAT=4.5      AC_DOG=4.6      AC_PUT=5.4

答案 1 :(得分:0)

如果您的数据位于“ d”文件中,请尝试使用gnu awk:

awk 'BEGIN{FPAT="A[CFN][A-Z_]*=[0-9.]+"} {for(i =1; i<=NF;i++) print $i" "}' d