为 table 中的特定列生成随机数
Generating random number for specific column in table
如何为所需列中的值生成随机数?
例如:
我有以下数据,我想为第 3 列生成随机数。
Col1 Col2, Col3, Col4, col5, col 6
2015-04-05 12:00:00Z, Rob-1, 47176121, 6, 3, 0.0
2015-04-05 12:00:00Z, Rob-2, 47176121, 6, 4, 0.0
2015-04-05 12:00:00Z, Rob-3, 37856233, 4, , 0.0
2015-04-05 12:00:00Z, Rob-4, 37856233, 5, , 0.0
2015-04-05 12:00:00Z, Rob-4, 4152121, 6, 0, 0.0
2015-04-05 12:00:00Z, Rob-5, 41452121, 16, , 0.0
2015-04-05 12:00:00Z, Rob-6, 41452121, 6, 0, 0.0
我用过awk '!a[[=13=]]{do{x=int(rand()*100000000);a[[=13=]]=x}while(b[x])}{print [=13=],a[[=13=]]}' file
但这似乎不起作用。
已编辑
预期的输出应该是这样的:-
Col1 Col2, Col3, Col4, col5, col 6
2015-04-05 12:00:00Z, Rob-1, 111, 6, 3, 0.0
2015-04-05 12:00:00Z, Rob-2, 111, 6, 4, 0.0
2015-04-05 12:00:00Z, Rob-3, 567, 4, , 0.0
2015-04-05 12:00:00Z, Rob-4, 567, 5, , 0.0
2015-04-05 12:00:00Z, Rob-4, 90009, 6, 0, 0.0
2015-04-05 12:00:00Z, Rob-5, 90009, 16, , 0.0
2015-04-05 12:00:00Z, Rob-6, 90009, 6, 0, 0.0
当第3列中的新值是随机生成的数字时,与之前的值重合,因此如果该值出现不止一次,它将具有相同的随机数是一致的
问题是您没有替换第 3 个字段
awk -F", " -v OFS=", " 'NR > 1 { = int(rand()*100000000)} {print}' file
请注意,awk(无论如何都是 gawk)每次都会生成相同的伪随机数序列。如果您不想这样,请添加 BEGIN {srand()}
(ref)
哦,所以你想替换 $3 中键入该值的每个值。好的:
awk -F", " -v OFS=", " '
NR > 1 { = ( in r ? r[] : r[]=int(rand()*100000000))}
{print}
' file
Col1 Col2, Col3, Col4, col5, col 6
2015-04-05 12:00:00Z, Rob-1, 23778751, 6, 3, 0.0
2015-04-05 12:00:00Z, Rob-2, 23778751, 6, 4, 0.0
2015-04-05 12:00:00Z, Rob-3, 29106573, 4, , 0.0
2015-04-05 12:00:00Z, Rob-4, 29106573, 5, , 0.0
2015-04-05 12:00:00Z, Rob-4, 84581385, 6, 0, 0.0
2015-04-05 12:00:00Z, Rob-5, 15220829, 16, , 0.0
2015-04-05 12:00:00Z, Rob-6, 15220829, 6, 0, 0.0
如何为所需列中的值生成随机数?
例如: 我有以下数据,我想为第 3 列生成随机数。
Col1 Col2, Col3, Col4, col5, col 6
2015-04-05 12:00:00Z, Rob-1, 47176121, 6, 3, 0.0
2015-04-05 12:00:00Z, Rob-2, 47176121, 6, 4, 0.0
2015-04-05 12:00:00Z, Rob-3, 37856233, 4, , 0.0
2015-04-05 12:00:00Z, Rob-4, 37856233, 5, , 0.0
2015-04-05 12:00:00Z, Rob-4, 4152121, 6, 0, 0.0
2015-04-05 12:00:00Z, Rob-5, 41452121, 16, , 0.0
2015-04-05 12:00:00Z, Rob-6, 41452121, 6, 0, 0.0
我用过awk '!a[[=13=]]{do{x=int(rand()*100000000);a[[=13=]]=x}while(b[x])}{print [=13=],a[[=13=]]}' file
但这似乎不起作用。
已编辑 预期的输出应该是这样的:-
Col1 Col2, Col3, Col4, col5, col 6
2015-04-05 12:00:00Z, Rob-1, 111, 6, 3, 0.0
2015-04-05 12:00:00Z, Rob-2, 111, 6, 4, 0.0
2015-04-05 12:00:00Z, Rob-3, 567, 4, , 0.0
2015-04-05 12:00:00Z, Rob-4, 567, 5, , 0.0
2015-04-05 12:00:00Z, Rob-4, 90009, 6, 0, 0.0
2015-04-05 12:00:00Z, Rob-5, 90009, 16, , 0.0
2015-04-05 12:00:00Z, Rob-6, 90009, 6, 0, 0.0
当第3列中的新值是随机生成的数字时,与之前的值重合,因此如果该值出现不止一次,它将具有相同的随机数是一致的
问题是您没有替换第 3 个字段
awk -F", " -v OFS=", " 'NR > 1 { = int(rand()*100000000)} {print}' file
请注意,awk(无论如何都是 gawk)每次都会生成相同的伪随机数序列。如果您不想这样,请添加 BEGIN {srand()}
(ref)
哦,所以你想替换 $3 中键入该值的每个值。好的:
awk -F", " -v OFS=", " '
NR > 1 { = ( in r ? r[] : r[]=int(rand()*100000000))}
{print}
' file
Col1 Col2, Col3, Col4, col5, col 6
2015-04-05 12:00:00Z, Rob-1, 23778751, 6, 3, 0.0
2015-04-05 12:00:00Z, Rob-2, 23778751, 6, 4, 0.0
2015-04-05 12:00:00Z, Rob-3, 29106573, 4, , 0.0
2015-04-05 12:00:00Z, Rob-4, 29106573, 5, , 0.0
2015-04-05 12:00:00Z, Rob-4, 84581385, 6, 0, 0.0
2015-04-05 12:00:00Z, Rob-5, 15220829, 16, , 0.0
2015-04-05 12:00:00Z, Rob-6, 15220829, 6, 0, 0.0