理解awk脚本

理解awk脚本,awk,Awk,我有下面的awk脚本,我不知道它做什么或如何正确执行它 $ awk 'BEGIN{ first_start=$2; old_start=first_start; } { chr=$1; current_start=$2; if (current_start > (old_start + 1)) { print chr"\t"first_start"\t&qu

我有下面的awk脚本,我不知道它做什么或如何正确执行它

$ awk 'BEGIN{
    first_start=$2;
    old_start=first_start;
    }
    {
        chr=$1;
        current_start=$2;
        if (current_start > (old_start + 1)) {
            print chr"\t"first_start"\t"old_start;
            first_start=current_start;
            old_start=first_start;
        }
        else {
            old_start=current_start;
        }
    }
    END {
        print chr"\t"first_start"\t"old_start;
    }' pileup.txt
输入的格式应为:

NC_000001.10    11456   A   0   *   *
NC_000001.10    11467   A   1   ,   E
NC_000001.10    250133  t   2   ..  EA
NC_000001.10    250164  t   2   ..  EE
NC_000001.10    250169  t   2   ..  EE
我试着用
awk-f pilleup\u to_bed.awk
执行它,结果

awk: pileup_to_bed.awk:1: $ awk 'BEGIN{
awk: pileup_to_bed.awk:1:       ^ invalid char ''' in expression
awk: pileup_to_bed.awk:1: $ awk 'BEGIN{
awk: pileup_to_bed.awk:1:       ^ syntax error


当您将代码放在
.awk
文件中时,您不需要为代码引用
(据我所知,这个问题应该是这样的(
awk
文件名是
script.awk
)。我正在删除
BEGIN{first_start=$2;old_start=first_start}
,因为将其保留在
BEGIN
部分没有意义,因为其中没有任何行被读取,感谢Ed sir在这里指出它

    {
        chr=$1;
        current_start=$2;
        if (current_start > (old_start + 1)) {
            print chr"\t"first_start"\t"old_start;
            first_start=current_start;
            old_start=first_start;
        }
        else {
            old_start=current_start;
        }
    }
    END {
        print chr"\t"first_start"\t"old_start;
    }
当我在上面跑的时候,就像:

awk -f script.awk Input_file
我得到以下输出:

NC_000001.10
NC_000001.10    11456   11456
NC_000001.10    11467   11467
NC_000001.10    250133  250133
NC_000001.10    250164  250164
NC_000001.10    250169  250169

当您将代码放在
.awk
文件中时,您不需要为代码引用
(据我所知,这个问题应该是这样的(
awk
文件名是
script.awk
)。我正在删除
BEGIN{first_start=$2;old_start=first_start}
,因为将其保留在
BEGIN
部分没有意义,因为其中没有任何行被读取,感谢Ed sir在这里指出它

    {
        chr=$1;
        current_start=$2;
        if (current_start > (old_start + 1)) {
            print chr"\t"first_start"\t"old_start;
            first_start=current_start;
            old_start=first_start;
        }
        else {
            old_start=current_start;
        }
    }
    END {
        print chr"\t"first_start"\t"old_start;
    }
当我在上面跑的时候,就像:

awk -f script.awk Input_file
我得到以下输出:

NC_000001.10
NC_000001.10    11456   11456
NC_000001.10    11467   11467
NC_000001.10    250133  250133
NC_000001.10    250164  250164
NC_000001.10    250169  250169

当我使用
awk-f script.awk pileup执行时,我得到
awk:script.awk:1:cat script.awk awk:script.awk:1:^语法错误
@EliranTurgeman,无需将
cat script.awk
放在
文件中,我提到要显示内容,请删除该行,然后您可以尝试执行它,然后让我知道它是如何运行的?当我使用
awk-f script.awk pileup执行时,我得到
awk:script.awk:1:cat script.awk:script.awk:1:^语法错误
@EliranTurgeman,无需将
cat script.awk
放在
.awk
文件中,我提到要显示内容,删除那一行,然后你可以尝试执行它,让我知道它是如何运行的?现在还不清楚你的代码应该做什么。如果您的问题是提供给定示例输入的预期输出,那么我们可以帮助您。您的代码应该做什么还不清楚。如果您希望您的问题提供给定示例输入的预期输出,那么我们可以帮助您。