使用awk在文本文件中的一行上打印一系列随机数

时间:2011-11-01 04:44:24

标签: 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 

但有了这个,我在任何地方都没有结束。整件事只有一条线。 我非常感谢任何建议。

2 个答案:

答案 0 :(得分:1)

在每行末尾添加行终止符

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

答案 1 :(得分:1)

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

编辑:将100 * rand()更改为101 * rand(),因为rand()返回的数字大于或等于零但小于1(不包括一个)