【问题标题】:AWK Pass Variable to CommandAWK 将变量传递给命令
【发布时间】:2018-12-14 00:36:52
【问题描述】:

我正在尝试使用 awk 将 $9 传递到我执行的 php 命令中。然而,$9 永远不会成为命令。如果我手动建立 param1 的值,一切正常。

cat file.name | awk -v date="$(date +"%Y-%m-%d %H:%M:%S")" '{
 x="'"`/usr/bin/php-cgi -f /path/hex2bin.php param1=$9`"'"
print "New value: ",$x
}'

【问题讨论】:

标签: bash awk


【解决方案1】:

第 1 点:虽然我不是 php 专家,但我见过 shell 命令通常在 exec 命令下运行。

第 2 点:您无需将catawk 一起使用。 awk 可以读取传递给它的任何 Input_file。例如--> awk '........' Input_file

尝试修复您的代码: 因为您没有提到为什么要在 awk 程序中再次打印 x 变量 + 为什么提到 date在变量中但没有被使用?

我在这里所做的是调用php 脚本,通过awksystem 命令传递$9 并在其中转义$(没有样本我无法运行此命令)。

awk -v s1="'" -v s2="\"" -v date="$(date +"%Y-%m-%d %H:%M:%S")" '
{
  system(s1 "/usr/bin/php-cgi -f /path/hex2bin.php param1= " s2 "$9" s1)
}'  Input_file

但是有一件事情是在awk 中使用system 命令,您将能够通过它执行其他/shell 命令,因为它正在另一个子shell 中执行命令,因此您将无法获取它的输出值awk 变量,如果我在这里遗漏了什么,专家可以纠正我。

编辑:或者尝试使用while循环本身。

while read line one two three four five six seven eight nine ten
do
   new_variable=$(your_php_command "$nine")
   echo "Use here new_variable...."
done < "Input_file"

【讨论】:

  • 目标:我希望能够从传入参数的 php 文件返回值,使其成为变量,然后在我的 AWK 中使用该变量以进行更多执行。
  • 你为什么不创建shell脚本然后你的php命令然后将shell变量传递给awk脚本或使用while循环来读取文件,你不需要进入谜题就可以回来变量到 awk 等。
  • 我只想在第二行输入 9 美元。我怎样才能使用`逻辑来做到这一点?
  • @user1157800,我相信我已经为您提供了该解决方案,并且我已经提到如果您使用系统命令,它可能无法返回值。我不相信没有系统我们可以在awk 中调用它。
  • @user1157800,也试试我的 EDIT 命令吗?这只是对您的指导。您可以在那里编写您的 php 实际脚本,然后可以将变量传递给它,让我知道?