带变量的Awk
我有一个awk命令来打印第26列中发生“200”的总次数带变量的Awk,awk,Awk,我有一个awk命令来打印第26列中发生“200”的总次数 awk '$26 ~ /200/{n++}; END {print n+0}' testfile 如何修改此语句,以便将200作为变量传递?e、 g.如果我有一个值为200的变量$code 提前谢谢 awk '$26 ~ code {n++} END {print n+0}' code=200 testfile 如果命令行上的文件名格式为var=val,则将其视为变量 分配变量var将被赋值为val 如果命令行上的文件名格式为var
awk '$26 ~ /200/{n++}; END {print n+0}' testfile
如何修改此语句,以便将200作为变量传递?e、 g.如果我有一个值为200的变量$code
提前谢谢
awk '$26 ~ code {n++} END {print n+0}' code=200 testfile
如果命令行上的文件名格式为var=val,则将其视为变量
分配变量var将被赋值为val
如果命令行上的文件名格式为var=val,则将其视为变量
分配变量var将被赋值为val
您可以在上面一行看到如何在awk中使用shell变量。awk one liner的一些注意事项:
。因为您定义的不需要打印n+0
不是从输入文本中选取的,而且您明确地选择了n
,所以它是数字类型,n++
没有意义n+0
应删除
之前的code>END
- 我复制了你关于检查200部分的代码。但这是有风险的。如果$ 26只有一个数字,则可以考虑使用<代码> 1×26=200 < /代码>或<代码> $26=“200”<代码>在这种情况下使用正则表达式可能会给出错误的结果,在您的$26中考虑,值是:<代码> 20200 < /代码> 。
。因为您定义的不需要打印n+0
不是从输入文本中选取的,而且您明确地选择了n
,所以它是数字类型,n++
没有意义n+0
应删除
之前的code>END
- 我复制了你关于检查200部分的代码。但这是有风险的。如果$ 26只有一个数字,则可以考虑使用<代码> 1×26=200 < /代码>或<代码> $26=“200”<代码>在这种情况下使用正则表达式可能会给出错误的结果,在您的$26中考虑,值是:<代码> 20200 < /代码> 。
中查找后,我想注意一下:文件名var=val赋值是在该参数将作为文件访问时执行的。这种类型的赋值允许在读取文件之前和之后更改变量。
意味着顺序很重要。@n0741337正确且以这种方式赋值的变量在开始部分不可用,这可能会导致混淆/错误。只有在需要在文件之间更改变量值时才应使用此方法,否则awk-v awkvar=“$shellvar”
几乎总是正确的方法。有关更多详细信息,请参阅我为comp.unix.shell常见问题解答撰写的文章。这是我不知道的,但在AWK编程语言的中查找后想注意的一点:文件名var=val赋值是在该参数将作为文件访问时执行的。这种类型的赋值允许在读取文件之前和之后更改变量。
意味着顺序很重要。@n0741337正确且以这种方式赋值的变量在开始部分不可用,这可能会导致混淆/错误。只有在需要在文件之间更改变量值时才应使用此方法,否则awk-v awkvar=“$shellvar”
几乎总是正确的方法。有关更多详细信息,请参阅我为comp.unix.shell常见问题解答所写的文章。如果code
的值为20
,并且数字200
出现在字段26中,那么是否匹配?您是在整个字段26上寻找匹配项还是仅在部分字段26上寻找匹配项?如果code
的值为20
,并且数字200
出现在字段26中,是否匹配?你是在寻找整个26号场地的比赛,还是只是其中的一部分?
awk -v var="$shellVar" '$26~var{n++} END{print n}' file