当前位置 : 主页 > 网络安全 > 测试自动化 >

性能 – 在BASH中选择文件中的随机行需要太长时间

来源:互联网 收集:自由互联 发布时间:2021-06-22
所以我有这个脚本,它有这样的语法: ./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.这个练习留给读者.

网友评论