shell脚本,根据字符串获取行号的

在文件A里根据行号获取到一个字符串,怎么根据这个字符串去文件B里面获取行号。我按下面这么写的,不行typetmp=`cat$paratmppath|awk"NR==$li... 在文件A里根据行号获取到一个字符串,怎么根据这个字符串去文件B里面获取行号。
我按下面这么写的,不行
typetmp=` cat $paratmppath | awk "NR==$line" | cut -d ":" -f1`
typeline=`cat $typepath | awk '/"$typetmp"/{print NR}'`
paratmppath文件里文本是
ts:ts

mp4:mp4
这样的。
typepath文件里文本是

ts
mp4
这样的。
展开
 我来答
百度网友5311d79
推荐于2017-11-26 · TA获得超过1.9万个赞
知道大有可为答主
回答量:6356
采纳率:71%
帮助的人:3120万
展开全部

awk中不能解析shell变量,建议做法是通过-v传递进去:

typeline=`cat $typepath | awk -v str="$typetmp" '/str/{print NR}'`

第一句之所以在awk中可以直接使用shell变量$line,是因为用的双引号。

 

从执行效率上来说,你的写法其实太过累赘,下面是改良版:

typetmp=`awk -F":" -v n=$line 'NR==n{print $1}' $paratmppath`
typeline=`sed -n '/'"$typetmp"'/=' $typepath`

这里用sed来获取行号。

第一句,cut能做的awk也能做,直接在一个awk里完成就行。

awk和sed本身就是直接对文件的处理,用不着先cat再通过管道传递过来处理。

"$typetmp"前面的单引号用于跟一开始的单引号凑成一对,关闭sed作用域回到shell环境中,使得shell可以解析此变量,然后重新用单引号再次进入sed作用域。等于将sed作用域从中间分割开了。

imcatyao
2014-04-25 · 超过13用户采纳过TA的回答
知道答主
回答量:43
采纳率:100%
帮助的人:21.5万
展开全部
给点文本范例。。。。
追问
paratmppath文件里文本是
ts:ts
mp4:mp4
这样的。
typepath文件里文本是
ts
mp4
这样的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式