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不支持二次解析。
请高人指教
展开
 我来答
UDOWELL
2011-05-30 · 超过11用户采纳过TA的回答
知道答主
回答量:25
采纳率:0%
帮助的人:0
展开全部
你好,可以将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
百度网友5311d79
2011-05-30 · TA获得超过1.9万个赞
知道大有可为答主
回答量:6356
采纳率:71%
帮助的人:3216万
展开全部
var是shell变量,而awk是Linux中独立于shell的一个工具。在awk中如果要解析shell变量,需要将变量拿到awk的作用域外面来,即,先关闭awk的单引号,引用变量后再次打开。
echo $str|awk -F, '{print '$var'}'
追问
不行啊,这样变量是几就输出几,没有指定到域上,还有,你说的awk的作用域之外是指什么?
追答
哦,明白你的意思了。前面再加个$就行了啊,就能实现你说的二次解析。
echo $str|awk -F, '{print $'$var'}'

我说的awk的作用域,是指awk后的两个单引号之间的部分。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
981146956
2011-06-08
知道答主
回答量:25
采纳率:0%
帮助的人:0
展开全部
var=6
str="11,22,33,44,55,66,88"
echo $str|awk -F',' -v number=$var '{print $number}'

上次发错,这次搞定 ,怎么还没采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式