Что простой способ состоит в том, чтобы считать случайную строку из файла в командной строке Unix?

251
задан codeforester 11 April 2019 в 06:46
поделиться

6 ответов

Можно использовать shuf:

shuf -n 1 $FILE

существует также утилита, названная rl. В Debian это находится в randomize-lines пакет, который делает точно, что Вы хотите, хотя не доступный во всех дистрибутивах. На его домашней странице это на самом деле рекомендует использование shuf вместо этого (который не существовал, когда это было создано, я верю). shuf часть GNU coreutils, rl не.

rl -c 1 $FILE
366
ответ дан rogerdpack 23 November 2019 в 02:54
поделиться

Вот простой сценарий Python, который сделает задание:

import random, sys
lines = open(sys.argv[1]).readlines()
print(lines[random.randrange(len(lines))])

Использование:

python randline.py file_to_get_random_line_from
3
ответ дан jfs 23 November 2019 в 02:54
поделиться

использование сценария удара:

#!/bin/bash
# replace with file to read
FILE=tmp.txt
# count number of lines
NUM=$(wc - l < ${FILE})
# generate random number in range 0-NUM
let X=${RANDOM} % ${NUM} + 1
# extract X-th line
sed -n ${X}p ${FILE}
11
ответ дан Paolo Tedesco 23 November 2019 в 02:54
поделиться

Другая альтернатива:

head -$((${RANDOM} % `wc -l < file` + 1)) file | tail -1
73
ответ дан PolyThinker 23 November 2019 в 02:54
поделиться

Единственная строка удара:

sed -n $((1+$RANDOM%`wc -l test.txt | cut -f 1 -d ' '`))p test.txt

Небольшая проблема: дублирующееся имя файла.

4
ответ дан asalamon74 23 November 2019 в 02:54
поделиться

perlfaq5: Как я выбираю случайную строку из файла? Вот выбирающий водохранилище алгоритм из Книги Camel:

perl -e 'srand; rand($.) < 1 && ($line = $_) while <>; print $line;' file

Это имеет значительное преимущество в пространстве по чтению целого файла в. Можно найти доказательство этого метода в Искусстве Программирования, Объем 2, Раздел 3.4.2, Donald E. Knuth.

16
ответ дан codeforester 23 November 2019 в 02:54
поделиться
Другие вопросы по тегам:

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