这个 awk 表达式是什么意思

时间:2021-05-19 02:04:58

标签: awk

我正在使用包含此命令的 bash 脚本。

awk -F ‘‘ ‘/abc/{print $3}’|xargs

这个命令是什么意思??假设输入已提供给 awk。

1 个答案:

答案 0 :(得分:1)

简单的回答是,它会根据您运行的 awk 版本以及 awk 脚本生成的输出字段的数量来做不同的事情。

我假设你打算写:

awk -F '' '/abc/{print $3}'|xargs

不是语法上无效的(由于“智能引号”):

awk -F ‘’’/abc/{print $3}’|xargs

-F '' 是每个 POSIX 的未定义行为,因此它将做什么取决于您正在运行的 awk 版本。在某些 awks 中,它会将当前行拆分为每个字段 1 个字符。在其他情况下,它将被忽略,并且该行将在每个空白序列处拆分为字段。在其他 awk 中,它仍然可以做任何其他事情。

/abc/ 在当前行查找与正则表达式 abc 匹配的字符串,如果找到则调用后续操作,在本例中为 {print $3}

然而,它被拆分为多个字段,print $3 将打印第 3 个这样的字段。

xargs 使用时只会打印多行输入的块,它全部在 1 行上,因此如果您没有很多字段被输出或几行,您可以获得 1 行全字段输出多场输出,如果你这样做。

我怀疑该代码的意图是执行此代码在单独的任何 awk 中实际会执行的操作:

awk '/abc/{printf "%s%s", sep, substr($0,3,1); sep=OFS} END{print ""}'

例如:

$ printf 'foo\nxabc\nyzabc\nbar\n' |
    awk '/abc/{printf "%s%s", sep, substr($0,3,1); sep=OFS} END{print ""}'
b a