Меню меню меню Bash Dialog

Просто для удовольствия, вот чистое решение bash, которое не использует shuf, sort, wc, sed, head, tail или любые другие внешние инструменты. [!d0 ]

Единственным преимуществом по сравнению с вариантом shuf является то, что он немного быстрее, так как это чистый баш. На моей машине для файла из 1000 строк вариант shuf занимает около 0,1 секунды, а следующий сценарий занимает около 0,01 секунды;) Поэтому, когда shuf является самым простым и коротким вариантом, это происходит быстрее.

Честно говоря, я все равно поеду за решением shuf, если важна высокая эффективность.

#!/bin/bash

FILE=file.txt

# get line count for $FILE (simulate 'wc -l')
lc=0
while read -r line; do
 ((lc++))
done < $FILE

# get a random number between 1 and $lc
rnd=$RANDOM
let "rnd %= $lc"
((rnd++))

# traverse file and find line number $rnd
i=0
while read -r line; do
 ((i++))
 [ $i -eq $rnd ] && break
done < $FILE

# output random line
printf '%s\n' "$line"
1
задан 7 April 2017 в 19:14

0 ответов

Другие вопросы по тегам:

Похожие вопросы: