给定一个包含字符串的文本文件,我想用随机替换(重复)绘制。
我知道人们可以用" shuf"来有效地洗牌。命令。使用重复绘制行的标准linux命令行工具是什么?
我目前的方法是Python脚本,它基本上生成[1,N]范围内的随机数,其中N是行数。生成的随机数(整数)用于索引字符串列表,然后打印。
这是我的Python脚本:
1 #!/usr/bin/env python
2
3 from random import random
4 import sys
5
6 fname = sys.argv[1]
7
8 with open( fname, 'r' ) as f:
9 lines = f.readlines()
10 lines = [ s.strip("\n") for s in lines ]
11
12 nlines = len( lines )
13
14 for i in range( nlines ):
15 idx = round(random()*nlines)
16 idx = int( idx )
17 print lines[ idx ]
示例文件是:
a
b
c
d
e
f
g
h
在示例上运行脚本的结果是:
c
b
f
b
c
c
b
d
答案 0 :(得分:1)
现代版shuf
为重复提供-r
选项。例如:
$ cat input
1
2
3
4
5
$ shuf -n 5 -r input
3
2
5
3
3
$ shuf --version
shuf (GNU coreutils) 8.23
早期版本的shuf
可能缺少-r
。
awk
$ awk '{a[NR]=$0} END{srand();for (i=1;i<=NR;i++)print a[int(1+NR*rand())]}' input
4
3
1
2
3