作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在名为 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
我已经尝试生成一个随机数列表并保存到一个新的文本文件,然后将新文本文件粘贴
或加入
到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
中的键执行此 block 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
关于bash - 如何为列表项生成唯一编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27986734/
我是一名优秀的程序员,十分优秀!