簡體   English   中英

在awk中訪問shell變量但未解釋

[英]Accessing shell variable in awk but not interpreted

我對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打印出來

您的腳本將0041\\n0000為一條記錄,因為其中沒有空格。 您還將在輸出0000\\n0000作為單個字段獲取,但是由於您echo $iv而不是echo "$iv" ,您無法分辨

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

您可以使用-v將變量傳遞給awk ,並且可以簡化腳本,因為{print $0}是默認操作:

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

您的腳本用單引號引起來,bash不會用單引號引起來的字符串替換變量。

將參數傳遞給awk的最干凈方法: awk 'script.....' count=$count

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM