如何在awk脚本中嵌入参数?

Jam*_*mie 1 scripting awk

这是这两个问题的演变,在这里这里.

对于我自己的学习,我正在尝试使用以下代码完成两个(更多)事情:

  1. 我没有调用我的脚本,而是 # myscript -F "," file_to_process如何将' -F ","'部分折叠到脚本本身?
  2. 我如何初始化变量,以便我只分配一次值(忽略后续匹配? 你可以从脚本中看到我解析每条规则中的秒和微秒,我想保留第一个分配,sec所以我可以从printf()语句中的后续匹配中减去它.

    #!/usr/bin/awk -f
    /DIAG:/  {
        lbl = $3;
        sec = $5;
        usec = $6;
        /Test-S/ {
            stgt = $7;
            s1  = $30;
            s2  = $31;
        }
        /Test-A/ {
            atgt = $7;
            a = $8;
        }
        /Test-H/ {
            htgt = $7;
            h = $8;
        }
        /Test-C/ {
            ctgt = $7;
            c = $8;
        }
    }
    /WARN:/ {
        sec = $4;
        usec = $5;
        m1 = $2;
        m2 = $3
    }
    {
     printf("%16s,%17d.%06d,%7.2f,%7.2f,%7.2f,%7.2f,%7.2f,%7.2f,%7.2f,%7.2f,%7.2f,%5d,%5d\n", lbl, sec, usec, stgt, s1, s2, atgt, a, htgt, h, ctgt, c, m1, m2)
    }
    
    Run Code Online (Sandbox Code Playgroud)

Pau*_*ce. 6

使用BEGIN子句:

BEGIN { FS = ","
    var1 = "text"
    var2 = 3
    etc.
}
Run Code Online (Sandbox Code Playgroud)

这在行处理语句之前运行.FS是字段分隔符.

如果要解析值并保留它,则取决于您是只想要第一个值还是想要每个前一个值.

保留第一个:

FNR==1 {
    keep=$1
}
Run Code Online (Sandbox Code Playgroud)

保留前一个:

BEGIN {
    prevone = "initial value"
}

/regex/ {
    do stuff with $1
    do stuff with prevone
    prevone = $1
}
Run Code Online (Sandbox Code Playgroud)