Печать последовательности случайных чисел в строке текстового файла с использованием awk

#awk #printf

#awk #printf

Вопрос:

У меня есть текстовый файл, names.txt , причем каждая строка содержит фамилию:

 Smith
Johnson
Morgan
...
...
 

Я хотел бы добавить семь случайных чисел от 0 до 100 в каждую строку, чтобы она выглядела так:

 Smith 76 94 56 99 32 21 11
Johnson 54 15.2 19.8 32.66 44.99 22.63 18.99 
Morgan 99 18.6 24.75 99.22 35.18 65.34 54.22
....
....
 

Я попытался использовать эту команду в awk:

 $ awk '{print $0; for (myvar = 1; myvar <= 7; myvar  ) print rand()*100}' names.txt 
 

но это дало мне

 Smith
76
94
56
 

и т.д.

Я знаю, что должен использовать printf, чтобы как-то заставить его работать, и я попробовал это:

 $ awk '{printf $0; for (myvar = 1; myvar <= 7; myvar  ) printf rand()*100}' names.txt 
 

но при этом я нигде не получаю конца строк. Все это всего лишь одна строка.
Я буду очень признателен за любые предложения.

Ответ №1:

 awk 'BEGIN { srand(); } 
{ 
  printf("%s", $0); 
  for (i=0;i<7;  i) 
    printf(" %d", 101*rand()); 
  printf("n");
}'
 

Редактировать: изменено 100 * rand() на 101 * rand(), поскольку rand() возвращает число, большее или равное нулю, но меньшее единицы (единица не включена)

Ответ №2:

Добавьте символ завершения строки в конце каждой строки

 awk '{printf "%s ", $0; for (myvar = 1; myvar <= 7; myvar  ) 
     printf "%d ", rand()*100; printf "n"}' names.txt
 

Комментарии:

1. Спасибо! Это было именно то, что я искал.

2. 1 хотя стоит отметить, что спрашивающий перепутал print, который выдает новую строку, и printf, который этого не делает. Также обратите внимание на n новую строку для ввода в printf.