awk将命令输出插入变量

时间:2019-11-27 19:33:58

标签: bash if-statement awk

我正在尝试将下面的输出插入变量null中。输出是一个字符串。我以前做过。

x

当我这样做时,它可以正常工作,并且在执行echo $ x时可以获得预期的输出

k="psz"

但是当我尝试在下面使用此功能时,它不起作用

x=$( awk -v a="k" -F '[:,]' '{ if($1 == "psz")  print $5 }' /etc/passwd )

它不起作用,回显x=$( awk -v a="k" -F '[:,]' '{ if($1 == a) print $5 }' /etc/passwd ) 给了我空白行。

1 个答案:

答案 0 :(得分:3)

您要使用字符串a而不是变量k的值来设置$k。如果设置正确,代码将正常工作。看:

k='accdias'
x=$(awk -va=$k 'BEGIN{FS=":"} $1==a {print $5}' /etc/passwd)
echo $x
Antonio Dias

我正在对此进行编辑,以显示不使用awk即可将变量值传递到-v程序的另一种方式:

k='accdias'
x=$(awk 'BEGIN{FS=":"} $1==ARGV[2] {print $5}' /etc/passwd $k)
echo $x
Antonio Dias

在上述代码中,ARGV[0]将被设置为awkARGV[1]将被设置为/etc/passwd,最后ARGV[2]将被设置为{{ 1}}的值,在该示例中为$k


Ed Morton的编辑(请参见下面的评论):

accdias