将NR的值传递给AWK中的变量

时间:2012-06-25 14:24:26

标签: regex bash shell sed awk

我们可以将NR传递给awk中的变量吗?

我有一个类似这样的脚本:

     awk -v { blah blah..   
     ..........
     count--
     print count
    }
     if (count==0)
    {print "The end of function"
     print NR 
     exit
     } 

这是代码的awk部分。我想将NR传递给var2:

    sed -n ''"$var1"','"$var2"'p'

必须多次重复使用!

感谢您的回复。

3 个答案:

答案 0 :(得分:3)

我不知道您希望通过awksedNR变量实现什么目标。你的意思是文件的行数吗?

这个命令得到它:

wc -l infile | sed -e 's/ .*$//'

因此,请使用-v切换到awk并根据需要使用它。下一个命令将打印10,因为infile在我的计算机中有十行。

awk -v num_lines=$(wc -l infile | sed -e 's/ .*$//') 'BEGIN { print num_lines }'

答案 1 :(得分:3)

如果您只想打印某个线条的子集,那么几乎就在那里。 -v标志是要走的路。

awk -v var1=15 -v var2=25 'NR>=var1 && NR<=var2 {blah blah ...}'

当然,您必须将15和25更改为您需要的内容。请注意,变量不应封装在引号中。

答案 2 :(得分:3)

正如其他人所说,有更好的方法来实现总体目标。

但是,为了回答您的具体问题:

var2=$(awk 'END {print NR}' inputfile)

并在AWK脚本中添加您可能需要的任何其他内容。