【问题标题】:Trying to print awk variable试图打印 awk 变量
【发布时间】:2017-08-17 02:30:19
【问题描述】:

我不是一个 awk 用户,但经过一些谷歌搜索后,确定它最适合我正在尝试做的事情......唯一的问题是,我无法让它工作。我正在尝试打印 sudoers 的内容,同时在 sudoers 条目之前插入服务器名称 ($i) 和逗号,因为我将其定向到 .csv 文件。

egrep '^[aA-zZ]|^[%]' //$i/etc/sudoers | awk -v var="$i" '{print "$var," $0}' | tee -a $LOG

这是我得到的输出:

$var,unixpvfn   ALL = (root)NOPASSWD:/usr/bin/passwd

awk: no program given

提前致谢

【问题讨论】:

  • ... '{print var, $0}' ...
  • 我试过了,我明白了:awk: 非法字段 $(aappmab00001d01), name "var" input record number 1, file source line number 1 awk: no program given
  • 请注意,@JamesBrown 建议使用 print var,而不是 print $var。 awk 不是 shell,它的语法更类似于 C 而不是 shell。您得到的答案都没有解释您发布的输出中的awk: no program given,因此您可能还有另一个问题需要发现,可能与在您没有向我们展示的地方错误地使用引号(不匹配或错误类型的引号)有关。

标签: awk


【解决方案1】:

egrep 在这里是多余的。就awk:

awk -v var="$i" '/^[[:alpha:]%]/{print var","$0}' //"$i"/etc/sudoers | tee -a "$LOG"

顺便说一句,你也可以使用sed:

sed "/^[[:alpha:]%]/s/^/${i},/" //"$i"/etc/sudoers | tee -a "$LOG"

【讨论】:

  • 很高兴看到它有帮助
【解决方案2】:

您可以保存grep 并让awk 完成所有工作:

awk -v svr="$i" '/^[aA-zZ%]/{print svr "," $0}' //$i/etc/sudoers 
    | tee -a $LOG

如果你把东西放在".." 之间,它表示文字字符串,变量不会在awk 中展开。另外,不要在变量前加上$,它会指示列,而不是你想要的变量。

【讨论】:

  • 正确,但[aA-zZ] 表示a、Z,而A 和z 之间的字符可能是空集。我知道 OP 有,但它没有意义,无论如何 - 考虑使用 [:alpha:]。
猜你喜欢
  • 2018-10-25
  • 1970-01-01
  • 1970-01-01
  • 2014-05-13
  • 2010-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-02
相关资源
最近更新 更多