awk 将命令输出插入到变量中



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

k="psz"

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

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 )

它不起作用,回声$x给了我一个空白行。

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

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

我正在编辑它以展示另一种在不使用-v的情况下将变量值传递给您的awk程序的方法:

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]将被设置为$k值,该值在该示例中accdias


来自Ed Morton的编辑(见下面的评论(:

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

最新更新