【发布时间】:2015-01-05 23:34:21
【问题描述】:
所以我有这个语法的脚本:
./script number file
其中 number 是我想从文件 file 中获取的行数。这些行是随机选择的,然后打印两次。考虑到一个非常大的文件 ~ 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
【问题讨论】:
-
数组在 Bash 中是出了名的低效,你应该能够使用 for 循环来执行此操作,然后使用 $RANDOM Bash 变量 modded 来获取范围内的行号,然后你可以构建一个字符串并像 sed 一样打印,sed -n '4p;500p;245p;6773334p;34322p'
标签: performance algorithm bash random