awk怎么通过参数化实现指定域的输出?
如str="1,2,3,4,5,6,8",传一个参数var(指定哪个域),echo$str|awk-F,'{print$var}'可是这样有问题,貌似awk不支持二次解析...
如str="1,2,3,4,5,6,8",传一个参数var(指定哪个域),echo $str|awk -F, '{print $var}'可是这样有问题,貌似awk不支持二次解析。
请高人指教 展开
请高人指教 展开
3个回答
展开全部
你好,可以将shell变量传入awk命令中,你的要求$var应该是域变量(如1,2...).
可以如下解决:
echo $str|awk -F',' '{print '$"$var"'}'
具体的解释,你可以参看一下chinaunix上面的shell十三问,有专门探讨关于shell元字符和sed,awk命令里面如何传入shell变量,以及如何将awk和sed的结果赋予shell变量.
在我这边测试可以运行:
简单测试脚本
#! /bin/sh
#fileName:test.sh
var=$1
str="1,2,3,4,5,6"
echo $str|awk -F',' '{print '$"$var"'}'
执行./test.sh 3
输出结果:3
可以如下解决:
echo $str|awk -F',' '{print '$"$var"'}'
具体的解释,你可以参看一下chinaunix上面的shell十三问,有专门探讨关于shell元字符和sed,awk命令里面如何传入shell变量,以及如何将awk和sed的结果赋予shell变量.
在我这边测试可以运行:
简单测试脚本
#! /bin/sh
#fileName:test.sh
var=$1
str="1,2,3,4,5,6"
echo $str|awk -F',' '{print '$"$var"'}'
执行./test.sh 3
输出结果:3
展开全部
var是shell变量,而awk是Linux中独立于shell的一个工具。在awk中如果要解析shell变量,需要将变量拿到awk的作用域外面来,即,先关闭awk的单引号,引用变量后再次打开。
echo $str|awk -F, '{print '$var'}'
echo $str|awk -F, '{print '$var'}'
追问
不行啊,这样变量是几就输出几,没有指定到域上,还有,你说的awk的作用域之外是指什么?
追答
哦,明白你的意思了。前面再加个$就行了啊,就能实现你说的二次解析。
echo $str|awk -F, '{print $'$var'}'
我说的awk的作用域,是指awk后的两个单引号之间的部分。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
var=6
str="11,22,33,44,55,66,88"
echo $str|awk -F',' -v number=$var '{print $number}'
上次发错,这次搞定 ,怎么还没采纳
str="11,22,33,44,55,66,88"
echo $str|awk -F',' -v number=$var '{print $number}'
上次发错,这次搞定 ,怎么还没采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询