Форматирование файлов: путаница с использованием переменной awk NR - PullRequest
3 голосов
/ 30 октября 2011

Я новичок в программировании на awk и немного смущен использованием переменной NR.

Мой код ...

awk 'BEGIN {k=NR;}{printf("%s %s %s %s\n",$k,$(k+1),$(k+2),$(k+3))}' auth_data

$ cat auth_data

6262 6530 6661 3162 6364 6264 6561 3430 3033 3332 6536 3139 6230 6261 61
30 3637 0A00 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 

Выход:

6262 6530 6661 3162 6364 6264 6561 3430 3033 3332 6536 3139 6230 6261 6130
3637 0A00 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000  6262 6530 6661

Но я хочу, чтобы вывод был в следующем формате:

  6262 6530 6661 3162 6364 6264 6561 3430
  3033 3332 6536 3139 6230 6261 6130 3637 
  0A00 0000 0000 0000 0000 0000 0000 0000
  0000 0000 0000 0000 0000 0000 0000 0000 

1 Ответ

3 голосов
/ 30 октября 2011

Я думаю, вы ищете NF, а не NR.

с Manpage:

NR Общее количество просмотренных входных записей.

NR - это фактический номер строки, но в этой задаче вы хотите сделать трюк с полем idx, а не со строками.

Кроме того, я думал, что ваши входные данные должны быть в одной строке в файле 'auth_data', верно?

если это так, вы можете попробовать

awk '{for(i=1;i<=NF;i++)if(i%8==0)print $i;else printf $i" "}' auth_data

проверьте тест ниже:

kent$  echo "6262 6530 6661 3162 6364 6264 6561 3430 3033 3332 6536 3139 6230 6261 6130 3637 0A00 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000"|\
awk '{for(i=1;i<=NF;i++)if(i%8==0)print $i;else printf $i" "}'
    6262 6530 6661 3162 6364 6264 6561 3430
    3033 3332 6536 3139 6230 6261 6130 3637
    0A00 0000 0000 0000 0000 0000 0000 0000
    0000 0000 0000 0000 0000 0000 0000 0000

И вернемся к проблеме: если вы просто хотите выполнить форматирование, достаточно xargs. см. ниже:

kent$  echo "6262 6530 6661 3162 6364 6264 6561 3430 3033\
        3332 6536 3139 6230 6261\
        6130 3637 0A00 0000 0000 \
        0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000"|xargs -n8
* * Тысяча двадцать-одина выход:
6262 6530 6661 3162 6364 6264 6561 3430
3033 3332 6536 3139 6230 6261 6130 3637
0A00 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000

Вы можете cat yourFile|xargs -n8 или xargs -n8 -a yourfile

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