我正在使用包含此命令的 bash 脚本。
awk -F ‘‘ ‘/abc/{print $3}’|xargs
这个命令是什么意思??假设输入已提供给 awk。
答案 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