我的 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)
我究竟做错了什么?谢谢
不,这不是system命令内部的工作方式awk。
OP 代码中发生了什么:
system很好(对于某些情况),但是这个命令有一个问题,您应该给它类似system("echo " $0" | cut -c1")获取其第一个字符的命令,并且您不需要使用变量等来保存其值并打印它在awk。shell风格。awkchar将具有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)