awk不';t赋值变量并使用$0
我正在使用下面的awk不';t赋值变量并使用$0,awk,Awk,我正在使用下面的/bin/sh代码来解析apt show的输出,并只打印与第二个模式匹配的包的名称,但它不起作用。相反,它在prints中输出模式本身,就好像从未分配变量pac,而是在所有情况下使用$0 apt show vim peazip 2> /dev/null | \ awk ' /^Package:/ { pac = substr($0, 10); print "found name "$pac; } /APT-Sources:
/bin/sh
代码来解析apt show
的输出,并只打印与第二个模式匹配的包的名称,但它不起作用。相反,它在print
s中输出模式本身,就好像从未分配变量pac
,而是在所有情况下使用$0
apt show vim peazip 2> /dev/null | \
awk '
/^Package:/ {
pac = substr($0, 10);
print "found name "$pac;
}
/APT-Sources: \/var\/lib\/dpkg\/status/ {
print "bingo "$pac;
}
'
输出:(在Ubuntu上呆呆地看着)
我做错了什么?Awk不要求变量名前面有
$
:)您的代码应该如下所示:
apt show vim peazip 2> /dev/null | \
awk '
/^Package:/ {
pac = substr($0, 10);
print "found name "pac;
}
/APT-Sources: \/var\/lib\/dpkg\/status/ {
print "bingo "pac;
}
'
Awk不要求变量名前面有
$
:)您的代码应该如下所示:
apt show vim peazip 2> /dev/null | \
awk '
/^Package:/ {
pac = substr($0, 10);
print "found name "pac;
}
/APT-Sources: \/var\/lib\/dpkg\/status/ {
print "bingo "pac;
}
'
awk类似于C,因为您不使用
$
获取变量的值:
$ awk 'BEGIN { x=42; print x }'
42
我认为awk中的$
是一个操作符,它获取由表达式在$之后标识的字段号的值。例如,第二个字段是$2
,最后一个字段是$NF
,其中NF是一个变量,其值是当前记录中的字段数
现在,为什么$pac
的行为像$0
在数字上下文中,awk对任意字符串的处理方式如下:获取字符串,在第一个非数字字符处截断它;如果截断导致空字符串,则在数值上将该字符串视为零
$ echo "foo bar" | awk '{x="2cats"; print $x}'
bar
pac
的值不是以数字开头的,因此在数字上它的值为零,然后应用$
“运算符”获得$0
,或整个字符串
$ echo "foo bar" | awk '{x="no-cats"; print $x}'
foo bar
awk类似于C,因为您不使用
$
获取变量的值:
$ awk 'BEGIN { x=42; print x }'
42
我认为awk中的$
是一个操作符,它获取由表达式在$之后标识的字段号的值。例如,第二个字段是$2
,最后一个字段是$NF
,其中NF是一个变量,其值是当前记录中的字段数
现在,为什么$pac
的行为像$0
在数字上下文中,awk对任意字符串的处理方式如下:获取字符串,在第一个非数字字符处截断它;如果截断导致空字符串,则在数值上将该字符串视为零
$ echo "foo bar" | awk '{x="2cats"; print $x}'
bar
pac
的值不是以数字开头的,因此在数字上它的值为零,然后应用$
“运算符”获得$0
,或整个字符串
$ echo "foo bar" | awk '{x="no-cats"; print $x}'
foo bar
不要将$放在变量名()前面。尝试使用不带
$
符号的pac变量不要将$放在变量名()前面。尝试使用不带$
符号的pac变量