在awk中访问shell变量但未解释

时间:2011-10-26 17:54:07

标签: linux bash shell awk

我对awk编程很新...

这是我的代码,我试图在awk

中访问shell变量count
ivlen=`cat record.txt | awk -F " " '{printf "%s",$10}'`
echo $ivlen

count=` expr $ivlen / 2 `
echo $count

echo "\nInitialization Vector : (Value) "

  // This one needs attention

修改:

iv=`awk -v count=$count 'BEGIN {RS=" ";ORS=" ";}     
           {if (NR > 4 && NR < count+4 )print $0}' esp_payload.txt`
echo $iv

输入:

  $cat esp_payload.txt
  0000 5FB4 0000 0041
  0000 0000 0000 0000 0000 0000 0000 0000
  0000 0000 0000 0000 5361 6C74 6564 5F5F
  D678 E0DA A075 5361 02B4 6273 D970 2F72

输出:(必填)(我希望这些0000字符串12 in number

 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  // this is what I want not what is displayed

输出:(显示在屏幕上)

 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 5361

现在出了什么问题?为什么一个0000没有打印,为什么5361打印出来

3 个答案:

答案 0 :(得分:2)

您的脚本将0041\n0000计为单个记录,因为它没有空格字符。您还在输出中将0000\n0000作为单个字段获取,但由于echo $iv而不是echo "$iv"

,您无法分辨

RS=" "更改为RS="[ \n]"

答案 1 :(得分:1)

您可以使用awk将变量传递给-v,并且您的脚本可以简化一点,因为{print $0}是默认操作:

iv=`awk -v count="$count" 'BEGIN { RS=" "; ORS=" " } 
        (NR > 4 && NR < count)' esp_payload.txt`

答案 2 :(得分:0)

您的脚本使用单引号,bash不会用单引号字符串替换变量。

将参数传递给awk的最简洁方法:awk 'script.....' count=$count