#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.