在Linux中将第n个字符更改为随机字符

时间:2016-03-18 09:10:39

标签: linux random awk sed

我有一个带有数字列表的文本文件。我想将第11个字符更改为随机数。 input.txt中
00018674395618674395
00018674396618674396
00018674397618674397
00018674398618674398
00018674399618674399
00018674400618674400

 sed 's/^\(.\{11\}\)./\1'$(((RANDOM % 10)+1))'/' input.txt > output.txt

然而,这只是生成一个随机数并将其作为第11个字符插入,因此第11个数字在每行中变为例如4。 我想在每一行都有一个随机数 00018674395618674395
00018674396318674396
00018674397518674397
00018674398718674398
00018674399718674399
00018674400218674400

提前致谢

1 个答案:

答案 0 :(得分:1)

srand()播种随机数生成器,以防每次生成结果时需要不同的随机数字串。如果没有,您可以删除所有BEGIN {srand()}。 (-*-实际上不在输出中,只是为了更容易查看随机数字的位置。)

$ awk 'BEGIN {srand()} {print substr($0,1,10) (int(10 * rand())) substr($0,12)}' r.txt
         -*-     
00018674398618674395
00018674394618674396
00018674395618674397
00018674391618674398
00018674394618674399
00018674405618674400
         -*-     

$ awk 'BEGIN {srand()} {print substr($0,1,10) (int(10 * rand())) substr($0,12)}' r.txt
         -*-     
00018674399618674395
00018674394618674396
00018674396618674397
00018674397618674398
00018674391618674399
00018674405618674400
         -*-