如何在awk中打​​印系统命令的结果

njk*_*015 2 bash awk

我的 bash 脚本中有以下一行:

echo "foo" | awk -F"=" '{char=system("echo $1 | cut -c1");}{print "this is the result: "$char;}' >> output.txt
Run Code Online (Sandbox Code Playgroud)

我想使用 awk 打印“foo”的第一个字母,这样我会得到:

this is the result: f
Run Code Online (Sandbox Code Playgroud)

在我的输出文件中,但相反,我得到:

this is the result: foo
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?谢谢

Rav*_*h13 5

不,这不是system命令内部的工作方式awk

OP 代码中发生了什么:

  • 您正在给出一个 shell 命令,其中system很好(对于某些情况),但是这个命令有一个问题,您应该给它类似system("echo " $0" | cut -c1")获取其第一个字符的命令,并且您不需要使用变量等来保存其值并打印它在awk
  • 您试图将其结果保存到变量中,但它不会有其值(系统命令的值),但有其状态。它不像这里的shell风格。awk
  • 因此,您的变量 namechar将具有0值(这是命令的成功状态system),并且当您打印时$char,它会打印整行(因为 in awk:print $0表示打印整行)。


您可以通过执行以下操作一次性完成此操作awk

echo "foo" | awk '{print substr($0,1,1)}'
Run Code Online (Sandbox Code Playgroud)

或具体使用 GNU awk

echo "foo" | awk 'BEGIN{FS=""} {print $1}'
Run Code Online (Sandbox Code Playgroud)