Доступ к переменной оболочки в awk, но не интерпретируется - PullRequest
1 голос
/ 26 октября 2011

Я очень новичок в программировании на awk ...

Вот мой код, в котором я пытаюсь получить доступ к переменной оболочки count в 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

Редактировать:

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 ]

2 голосов
/ 26 октября 2011

Ваш скрипт считает 0041\n0000 отдельной записью, потому что в нем нет пробела. Вы также получаете 0000\n0000 как одно поле в своем выводе, но вы не можете сказать, потому что вы echo $iv вместо echo "$iv"

Измените RS=" " на RS="[ \n]".

1 голос
/ 26 октября 2011

Вы можете передать переменные в awk, используя -v, и ваш сценарий можно немного упростить, потому что {print $0} является действием по умолчанию:

iv=`awk -v count="$count" 'BEGIN { RS=" "; ORS=" " } 
        (NR > 4 && NR < count)' esp_payload.txt`
0 голосов
/ 26 октября 2011

Ваш скрипт в одинарных кавычках, bash не подставляет переменные в одинарные строки в кавычках.

Самый простой способ передачи параметров в awk: awk 'script.....' count=$count.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...