echo boy:foo:cheese | awk -F":" '{print $1}'
结果:男孩
echo boy:foo:cheese | awk -F":" '{print $2}'
结果:foo
i=1
echo boy:foo:cheese | awk -F":" '{print $($i)}'
结果:男孩:foo:奶酪
此外,
i=1
echo boy:foo:cheese | awk -F":" '{print $i}'
结果:男孩:foo:奶酪
我希望能够打印第i个项目。发生这种情况的唯一可能原因是awk不支持其打印值的变量?我的最终目标是遍历字符串并获取: 男孩 FOO 干酪
答案 0 :(得分:0)
想出来了!
echo "cat:test:cheese" | awk -F":" '{print $'$i'}'
猫
答案 1 :(得分:0)
您似乎注意到shell变量和awk位置/字段变量共享语法$#
,但未能认为这意味着awk无法扩展两者。
shell会扩展shell所做的变量或,而不是两者。
awk脚本周围的单引号意味着shell 不所以awk会这样做。所以'{print $2}'
告诉awk打印第二个字段。同样地,$1
告诉awk打印第一个字段。然而,'{print $($i)}'
告诉使用awk变量i
,然后将该值用作位置/字段变量($<i>
),然后使用 作为另一个位置/ field variable $(<$<i>>)
。
未初始化时,awk中的变量默认为0
,因此序列为:
$($i)
$($0)
$(input line)
然后导致awk尽职尽责地打印出来。
使用shell变量的正确方法是使用-v var="$1"
将其传递给awk,然后在awk中使用var
。 awk中的非位置/非位置变量不使用$
sigil。