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

发布于 2024-12-12 05:17:35 字数 1120 浏览 0 评论 0原文

我对 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个

 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

I am very new to awk programming ...

Here is my code where I am trying to access shell variable count in awk

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

Edit :

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

Input:

  $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

Output:(required) (I want those 0000 strings 12 in number)

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

output : (displayed on screen)

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

Now what is going wrong ?? why one 0000 not printed and why 5361 printed out

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

烟花易冷人易散 2024-12-19 05:17:35

您的脚本将 0041\n0000 计为单个记录,因为其中没有空格字符。您还将 0000\n0000 作为输出中的单个字段,但您无法分辨,因为您 echo $iv 而不是 echo "$iv "

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

Your script is counting 0041\n0000 as a single record because it has no space character in it. You're also getting 0000\n0000 as a single field in your output, but you can't tell because you echo $iv instead of echo "$iv"

Change RS=" " to RS="[ \n]".

思念满溢 2024-12-19 05:17:35

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

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

You can pass variables to awk by using -v and your script can be simplified a bit, because {print $0} is the default action:

iv=`awk -v count="$count" 'BEGIN { RS=" "; ORS=" " } 
        (NR > 4 && NR < count)' esp_payload.txt`
去了角落 2024-12-19 05:17:35

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

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

Your script is in single quotes, bash doesn't substitue variables in single quoted strings.

The cleanest way to pass parameters to awk: awk 'script.....' count=$count.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文