Почему нельзя изменить директорию в отдельном процессе?

Чтобы получить один случайный блок смежных строк, используйте shufдля получения одной случайной строки, затем используйте grepдля получения блока строк после случайно выбранной строки.

$ shuf -n 1 file | grep -f - -A 10 file

Это приведет к двойному доступу к файлу. Параметр -f указывает grep получить шаблон поиска из файла, в данном случае stdin (, используя тире в качестве значения параметра f ), который представляет собой одну случайно выбранную строку из файла.

Простая функция:

function random-block {
  shuf -n 1 $1 | grep -f - -A $(($2>0?$2-1:0)) $1
}

Пример использования:

$ random-block /var/log/syslog 10

Действительно, это не будет гарантировать вывод запрошенного количества строк, если случайный выбор настолько далеко вниз, что при выборе блока остается недостаточно строк.

Расширенная функция может выглядеть так:

function random-block {
  head -n $(($(wc -l | cut -f1 -d ' ')-$2+1)) $1 | shuf -n 1 | grep -f - -A $(($2>0?$2-1:0)) $1
}

Это захватит все строки в файле, кроме последних n строк, а затем перетасует этот список строк. Это гарантирует, что grep всегда сможет выбрать запрошенное количество строк.

1
18.10.2020, 15:27
0 ответов

Теги

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