我对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
打印出来
答案 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
。