所以我有这个脚本,它有这样的语法: ./script number file 其中number是我想从文件文件中获取的行数.这些线是随机选择的,然后打印两次.考虑到一个非常大的文件~1 000 000行,这个算法运行得太
./script number file
其中number是我想从文件文件中获取的行数.这些线是随机选择的,然后打印两次.考虑到一个非常大的文件~1 000 000行,这个算法运行得太慢了.我不知道为什么因为打印只是访问数组.
#!/bin/bash max=`wc -l $2 | cut -d " " -f1` users=(`shuf -i 0-$max -n $1`) pages=(`shuf -i 0-$max -n $1`) readarray lines < $2 for (( i = 0; i < $1; i++ )); do echo L ${lines[${users[i]}]} ${lines[${pages[i]}]} done for (( i = 0; i < $1; i++ )); do echo U ${lines[${users[i]}]} ${lines[${pages[i]}]} done也许你可以完全没有数组,只需使用文件实用程序和临时文件:
# Put the shuf outputs in two separate files: shuf -n "$1" "$2" > shuf_users shuf -n "$1" "$2" > shuf_pages # paste the two: paste -d ' ' shuf_users shuf_pages | sed 's/^/L /' paste -d ' ' shuf_pages shuf_users | sed 's/^/U /'
在@ rici的解决方案中,罪魁祸首也可能在输出行的两个循环中(例如循环非常慢).
您应该使用mktemp来创建临时文件shuf_users和shuf_pages.这个练习留给读者.