【问题标题】:Awk trouble passing in shell variables传递 shell 变量的 awk 问题
【发布时间】:2015-05-02 07:27:26
【问题描述】:

这个问题已经在这里问过了;但是我按照示例进行操作,但我的脚本仍然无法正常工作。我正在将文件名从 shell 脚本传递给 awk。问题是,var 没有扩展为文件名。

这是一行:

plot=`awk -v var="$state_file" FNR==1{print} var`

awk 只是抱怨它无法打开文件var

【问题讨论】:

  • 你想在这里做什么?从您的示例中完全不清楚。

标签: shell awk


【解决方案1】:

您的示例没有在 script 部分周围加上引号,这是 shell 将其作为单个参数传递给 awk 所必需的。应该是这样的:

plot=$(awk -v var="$state_file" 'FNR==1{print} var')

(例如,使用单引号)。由于缺少引号,awk 将其视为两个参数(根据其manual page,第二个被假定为文件):

FNR==1{print}
var

根据 OP 的评论,$state_file 可能是应该由 awk 处理的文件的名称。通常是这样的:

plot=$(awk 'FNR==1{print}' < "$state_file")

plot=$(awk 'FNR==1{print}' "$state_file")

【讨论】:

  • 嗨,这卡在声明上。我已经验证 state_file 存在,并使用 sh -x 选项查看。
  • 当我读到它时,你的例子是不完整的,因为 awk 期望读取数据流 - 但我看不到。然而,问题似乎集中在 (a) 传递 shell 变量的问题,以及 (b) 关于名为 var 的文件的无法解释的消息。通常我会看到一个文件通过管道传输到 awk 而不是作为变量给出。
  • 我认为最后一件事是 OP 正在寻找的,但您应该明确表示它应该写为 plot=$(awk 'FNR==1{print}' "$state_file"),即使用带引号的 shell 变量并且没有不推荐使用的反引号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-28
  • 1970-01-01
  • 2014-09-09
  • 2016-02-09
  • 2012-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多