带变量的Awk

带变量的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”的总次数

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
    没有意义

  • END
    之前的code>

  • 我复制了你关于检查200部分的代码。但这是有风险的。如果$ 26只有一个数字,则可以考虑使用<代码> 1×26=200 < /代码>或<代码> $26=“200”<代码>在这种情况下使用正则表达式可能会给出错误的结果,在您的$26中考虑,值是:<代码> 20200 < /代码>

您可以在上面一行看到如何在awk中使用shell变量。awk one liner的一些注意事项:

  • 不需要打印n+0
    。因为您定义的
    n
    不是从输入文本中选取的,而且您明确地选择了
    n++
    ,所以它是数字类型,
    n+0
    没有意义

  • END
    之前的code>

  • 我复制了你关于检查200部分的代码。但这是有风险的。如果$ 26只有一个数字,则可以考虑使用<代码> 1×26=200 < /代码>或<代码> $26=“200”<代码>在这种情况下使用正则表达式可能会给出错误的结果,在您的$26中考虑,值是:<代码> 20200 < /代码>


这是我不知道的事情,但在AWK编程语言
中查找后,我想注意一下:文件名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