Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于可变长度文件的多模式的Awk_Awk - Fatal编程技术网

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

用于可变长度文件的多模式的Awk,awk,Awk,我正在尝试搜索多个模式,在这些模式中,我将显示前几个字符的开头和结尾。这适用于单个模式 awk '/test_pattern/ { match($0, /test_pattern/); print substr($0, RSTART - 10, RLENGTH + 20);' file 如何处理多个模式?该文件不是基于列,而是基于分隔符。多谢各位 下面是一行的示例 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|

我正在尝试搜索多个模式,在这些模式中,我将显示前几个字符的开头和结尾。这适用于单个模式

awk '/test_pattern/ { match($0, /test_pattern/); print substr($0, RSTART - 10, RLENGTH + 20);' file
如何处理多个模式?该文件不是基于列,而是基于分隔符。多谢各位

下面是一行的示例

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
我正在尝试得到所有以AC、AF和AN开始的东西。同时,如果可能的话,我想要前两列

预期产出:

X     Y    AC=1    AF=3.18593e-05  AC_CAT=4.5   AC_DOG=4.6   AC_PUT=5.4

谢谢。

我想你把
AN=
列意外地超出了你的预期输出,因为你在你的问题
中说,我试图得到所有以AC、AF和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
$cat tst.awk
开始{FS=“[;|]”OFS=“\t”}
{
打印文件“%s%s%s”$1,OFS$2

对于(i=3;i如果您的数据在'd'文件中,请尝试gnu awk:

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

awk'BEGIN{FPAT=“A[CFN][A-Z][*=[0-9.]+”}{for(i=1;i请发布一些带有相关预期输出的示例数据。刚刚添加。Thankstory,刚刚更新了它..不客气。花几个小时看看你是否得到了更好的答案,然后看看下一步该怎么做。实际上,我希望打印所有以AC、AN和AF开头的字段…这可能吗?这正是你得到的结果。看看e输出-所有字段都以AC、AN和AF开头。明白了。谢谢。