正在尝试打印awk变量

正在尝试打印awk变量,awk,Awk,我不是一个很好的awk用户,但在谷歌搜索了几次之后,我决定它将最适合我正在尝试做的事情……唯一的问题是,我无法让它工作。我试图打印出sudoers的内容,同时在sudoers条目之前插入服务器名($I)和逗号,因为我将它定向到一个.csv文件 egrep '^[aA-zZ]|^[%]' //$i/etc/sudoers | awk -v var="$i" '{print "$var," $0}' | tee -a $LOG 这是我得到的输出: $var,unixpvfn ALL = (ro

我不是一个很好的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

提前感谢

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"

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

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

若你们把东西放在“
”和“
”之间,它意味着文字字符串,变量不会在awk中展开。另外,不要将
$
放在变量前面,它将指示列,而不是您所指的变量。

..'{print var,$0}'…
我试过了,我得到了这个:awk:invally field$(aappmab00001d01),name“var”输入记录编号1,文件源行编号1 awk:no program given注意到@JamesBrown建议
print var
,而不是
print$var
。Awk不是shell,它的语法更类似于C而不是shell。您得到的答案中没有一个解释了您发布的输出中的
awk:no program
,因此您可能还有另一个问题需要解决,可能与您没有向我们展示的地方错误地使用引号(不匹配或错误的引号类型)有关。很高兴看到这有助于正确的想法,但
[aA zZ]
意味着
a
Z
,以及
A
Z
之间的字符,这些字符可能是空集。我知道OP是这样的,但它没有意义,不管怎样——考虑使用<代码> [Alph::] /Cord>。