对于我自己的学习,我正在尝试使用以下代码完成两个(更多)事情:
# myscript -F "," file_to_process如何将' -F ","'部分折叠到脚本本身?我如何初始化变量,以便我只分配一次值(忽略后续匹配? 你可以从脚本中看到我解析每条规则中的秒和微秒,我想保留第一个分配,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)使用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)