我在一个名为的文件中有一长串值,list.txt
并且我想为文件文本文件中的每个项目生成一个随机的唯一数字。如果该项目出现多次,它将具有相同的唯一ID
例如,list.txt
将是:
may-111
may-111
rob-222
kim-456
may-111
我希望能够为每个项目分配一个随机数。如果该项目出现不止一次,则它将具有相同的唯一ID号,因此预期输出应为:-
may-111 - 789
may-111 - 789
rob-222 - 365
kim-456 - 641
may-111 - 789
我曾尝试生成随机数的列表,并保存到一个新的文本文件,然后paste
或join
新的文本文件保存到list.txt
:
paste -d list.txt random.txt
当前,输出不保留唯一ID,并且如果同一名称多次出现,则其具有不同的ID。
您可以使用以下awk:
awk '!seen[$1]{seen[$1] = rand() * 1000000} {print $0 " - " seen[$1]}' file
may-111 - 840188
may-111 - 840188
rob-222 - 394383
kim-456 - 783099
may-111 - 840188
rand()
是生成随机数的函数,例如 0.840188
seen
是一个关联数组,键为$1
,值为随机数!seen[$1]
-对不在数组中的键执行此块 seen
seen[$1] = rand() * 1000000
-用key=$1
和填充数组value=rand()
{print $0 " - " seen[$1]}
-$1
从数组中打印当前行并存储键的随机值。编辑:(感谢JID)可以使用此awk命令来避免数字重复:
awk '!seen[$0]{do{x=int(rand()*1000);seen[$0]=x}while(nums[x])}
{print $0, "-", seen[$0]}' ile
may-111 - 840
may-111 - 840
rob-222 - 394
kim-456 - 783
may-111 - 840
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句