zoukankan      html  css  js  c++  java
  • shell脚本,根据字符串获取行号的

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

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

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

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

    1
    2
    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作用域从中间分割开了。

  • 相关阅读:
    linux-满足多字符条件统计行数
    oracle的面试问题
    在开发过程中为什么需要写存储过程
    面向对象编程
    动态SQL
    触发器

    子程序
    游标
    集合
  • 原文地址:https://www.cnblogs.com/Ph-one/p/6370125.html
Copyright © 2011-2022 走看看