Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Правильно ли я разделил сеть на подсети?

Лучший ответ:
Маска подсети занимает 16 бит, но в третьем октете есть бит, который не попадает под неё. Что мне делать с этим битом?
Задание - конечно, бредовое. 201.111.32.0/16 - это адрес хоста, а не сети, потому что адрес имеет единичные биты в области нулевых битов маски:
Host 11001001 01101111 00100000 00000000
Mask 11111111 11111111 00000000 00000000
Но к тому, что преподаватели сами безграмотны, мы уже привычные... посему попробуем интерпретировать задание так: выделение производить в подсети, в которой находится узел 201.111.32.0/16 (это подсеть 201.111.0.0/16), выделяемые подсети должны располагаться не ранее указанного адреса узла, и допускать количество хостов не менее заданного.

Начать надо с определения минимальной маски конечной подсети.
Хостов Маска
 170     /24
 590     /22
1500     /21
 800     /22
 254     /24
Далее, чтобы заполнять диапазон оптимальным образом, надо выделять подсети так, чтобы они занимали наиболее широкую возможную подсеть полностью либо по максимуму. Т.е. берём заданную границу host 201.111.32.0 mask /16 и начинаем "откусывать" требуемые подсети. С целью минимизации расхода адресного пространства мы на каждом шагу распределяем самую "широкую" из подсетей, которая укладывается в текущее место.

Сначала определяем максимальную маску для данного узла. Это будет маска /19:
Host 11001001 01101111 00100000 00000000
Mask 11111111 11111111 11100000 00000000
Значит, с данного адреса мы можем сразу распределить подсеть 3. Она будет иметь адрес 201.111.32.0/21 и занимать диапазон адресов 201.111.32.0 - 201.111.39.255, последний адрес является бродкастом.

Теперь мы распределяем оставшиеся подсети с первого свободного после уже выделенной подсети адреса 201.111.40.0. Максимальная маска для этого узла - /21. Соответственно распределяем здесь самую крупную из оставшихся подсетей. Это подсеть 2. Она будет иметь адрес 201.111.40.0/22, займёт диапазон адресов 201.111.40.0-201.111.43.255.

Далее мы распределяем оставшиеся подсети с первого свободного после уже выделенной подсети адреса 201.111.44.0. Максимальная маска для этого узла - /22. Соответственно распределяем здесь самую крупную из оставшихся подсетей. Это подсеть 4. Она будет иметь адрес 201.111.44.0/22, займёт диапазон адресов 201.111.44.0-201.111.47.255.

Далее мы распределяем оставшиеся подсети с первого свободного после уже выделенной подсети адреса 201.111.48.0. Максимальная маска для этого узла - /20. Соответственно распределяем здесь самую крупную из оставшихся подсетей. Это подсеть 1. Она будет иметь адрес 201.111.48.0/24, займёт диапазон адресов 201.111.48.0-201.111.48.255.

Далее мы распределяем оставшиеся подсети с первого свободного после уже выделенной подсети адреса 201.111.49.0. Максимальная маска для этого узла - /24. Соответственно распределяем здесь самую крупную из оставшихся подсетей. Это единственная оставшаяся подсеть 5. Она будет иметь адрес 201.111.49.0/24, займёт диапазон адресов 201.111.49.0-201.111.49.255.

Худший ответ:
https://5a5.ru/i/s
Не за что
Вопрос: Стоит ли vim усилий?

Лучший ответ:
Однозначно стоит учить. Повышается скорость редактирования текста (практически не нужно переключаться на мышь) и в целом уровень комфорта при работе в текстовом редакторе.

Серьезным аргументом за изучение является тот факт, что Vi предустановлен практически в любой UNIX-системе. Это означает, что вы имеете один интерфейс, работая с текстом как локально, на домашней машине, так и удаленно, на сервере.

Vim имеет обильное количество настроек и подробнейшую документацию по ним, встроенную в редактор. Есть много возможностей для адаптации редактора практически под любые нужды, в частности, имеется встроенный язык программирования для написания различных сценариев. Редактор отлично справляется с большими файлами.

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

UPD Добавлю, что учить то на самом деле не много. От силы пару десятков основных команд, немного практики и вот вы уже уверенный пользователь Vim.

Худший ответ:
Vim - это текстовый редактор в первую очередь. Если же говорить про разработку, то в ней не нужно писать очень быстро очень много текста. А если вдруг, у вас так, то вы делаете что-то не то. Кодинг в разработке только одна из стадий и не самая длительная.
То что vim присутствует практически везде вообще не аргумент, vim без плагинов совсем не ide.
Тем не менее, попробуйте установить его как ide для вашего языка. Тогда выяснится, что нужно повеселиться с плагинами. Что обвес всем этим невелирует маленький быстрый редактор, и что скорость работы плагинов в разы тормознутей специализированного ide. Кто-то напишет, что я не те плагины брал, но устанавливать неофит будет так же, сделать это одной кнопкой не получится. Если цель не работать, а настраивать, то это отличный выбор.
Есть деньги на нормальную ide, то выбор очевиден, если нет, то все равно нужно 10 раз подумать.
Вопрос: Как открыть папку в проводнике используя bat-файл?

Лучший ответ:
Ну во-первых, "Рабочий стол" - это в реальности директория "Desktop".
Во-вторых арнумент "" не нужен, указывайте директорию первым аргументом.
В-третих "%SystemRoot%\explorer.exe" "C:\Users\vern1\Desktop" сработает, а вот по поводу специально-витуальной директории OneDrive - сильно сомневаюсь...

Худший ответ:
"%SystemRoot%\explorer.exe" "C:\Users\vern1\Desktop" - также не работает, возможно из-за OneDrive

Проблему решил через костыли создав ярлык для папки
https://answers.microsoft.com/ru-ru/windows/forum/...

В качестве ссылки использую это (свойства созданного ярлыка для папки)


Итоговый вид для запуска папки выглядит так
%SystemRoot%\explorer.exe "C:\Users\vern1\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\Cloverly.lnk"
Вопрос: Как оформить список C++?

Лучший ответ:
Тут есть несколько фундаментальных ошибок.

С++ -- это не C.
Не стоить пользоваться массивами в стиле char nameF[10]. Для этого есть std::string. Для других типов можно использоватьstd::vector или std::array.
То же самое и касательно printf/scanf. В C++ боле каноничным будет использование std::cout, std::cin.

Не нужно записывать строковое представление в массив.
Храните массив структур. При необходимости, распечатывайте в цикле.

Пользуйтесь манипуляторами.
В C++ можно подключить заголовочный файл iomanip. В нём есть манипулятор setw. Его использование поможет вам сделать таблицу с ровными краями. Есть ещё, например setprecision, если необходимо регулировать точность выводимых значений.

PS
Документацию по всему описанному выше можно найти на cppreference.com

Худший ответ:
Используйте snprintf. Так можно с тем же форматом вывести все данные не в консоль, а в строку.
Вопрос: Почему выдает ошибку при парсинге «TypeError: find() takes no keyword arguments»? Как исправить это?

Лучший ответ:
roomlist у тебя <class 'bs4.element.Tag'>
Читай доки 

Измененный пример
import requests
from bs4 import BeautifulSoup
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0"}
url = "https://hamptonvolgograd.ru/nomera/"
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")
roomlist = soup.findAll("span", class_="h1")

for hostel in roomlist:
    print(hostel.text.strip())
вывод 
Номер с двуспальной кроватью (номер первой категории)
Номер с двумя кроватями (номер первой категории)
Номер с двуспальной кроватью и диваном-кроватью (Джуниор сюит)
Номер для людей с ограниченными возможностями (номер первой категории)


Худший ответ:
Что именно непонятно?
TypeError: find() takes no keyword arguments
Переводится как:
TypeError: find() не принимает именованные аргументы
Например в:
roomlist = soup.find("ul", id="roomsList")
id - как-раз является таковым. То есть, чисто по ошибке это должно выглядеть как-то так:
roomlist = soup.find("ul", "roomsList")
Однако, насколько это верно с точки зрения синтаксиса я не знаю. Узнавайте сами:

в документации
в исходниках (любая нормальная IDE позволяет перейти к нужной функции/классу из либы в пары кликов)
Вопрос: Как лучше установить Linux в частности для работы с Docker?

Лучший ответ:
Docker - легкая виртуализация. Вы хотите собрать матрешку из виртуализации внутри виртуализации?
Для изучения Linux противопоказано ставить его в виртуалку. 
Эффективность такого подхода - примерно как учить язык по разговорнику.

Худший ответ:
Для работы с Docker лучше установить просто Docker.
Он в Windows 10 будет работать из-под WSL - это и основы linux для вас будут как раз при работе с Docker.
Вопрос: Предположим вы столкнулись с ошибкой где её не должно быть, либо получили неверный текст ошибки, опишите ваши действия.?

Лучший ответ:
0. Ты, видимо, тестировщик aka QA Engineer
1. Ты столкнулся с дефектом/багом (поведение не совпадает с ожиданием), таким как одно из:
- Ошибка там, где ошибки быть не должно. (Например оставляешь комментарий, а вместо оставленного комментария ты получаешь ошибку, не важно какую)
- Не та ошибка, которая ожидалась, если ожидалась ошибка. (Например ты оставляешь очень длинный комментарий, но вместо "Ваш комментарий слишком длинный" ты получаешь "Произошла неизвестная ошибка")

2. Тебе нужно описать, что ты будешь делать дальше.

3. Тебе нужно написать баг-репорт для этого гипотетического дефекта на английском.

Худший ответ:
ошибка где ее не должно быть
неверный текст ошибки
наверное тут имеется в виду ошибка - сообщение об ошибке самого приложения (т.е. с точки зрения тестирования это не ошибки приложения а ожидаемое поведение и часть интерфейса, типа пытаешься сохранить файл но файл с таким именем существует, приложение выдает предупреждение - "ошибка, не могу сохранить потому что такой файл существует")

в этом случае фраза - где ее где должно быть, нужно понимать как, например на попытку открыть документ для просмотра получаешь сообщение - "не могу сохранить файл", ну а неверный текст ошибки добавляет сюда еще и ошибки в самом тексте типа "Обшибка, файлб не найжден"

Что делать? как обычно, тикет с описанием способа воспроизведения и описанием, что ожидал, что делал, что получил
Вопрос: Как организовать лучшее окружение для разработки под Битрикс?

Лучший ответ:
Лично я пользуюсь рецептом этих ребят: https://southbridge.io/bitrix-k8s Его 1 раз освоить - потом всю жизнь наслаждаться. Но там у них в статье, конечно, изложен только общий план, но более подробно никто с вами делиться не будет.

Худший ответ:
Я с Битриксом незнаком, но все же отвечу (ИМХО, это не зависит от продукта и даже от языка).
Есть два вопроса:
1) как совместно работать с кодом? Git сегодня занял 99% рынка, так что ответ простой - Git репозитори или в облаке (Github, GitLab, ...) или локально. И выработать методику работы - или git workflow, или попроще.
2) как поднимать тестовые окружения? Можно на основе K8S (как посоветовала Юлия Бедросова ),  можно на основе обычных виртуалок локально или в облаке. Зависит от того,  достаточно ли  вам фиксированное кол-во тестовых сред, или необдимо поднимать новую по запросу. И ес-но, от devops skills вашей команды.
Вопрос: Жив ли еще руби?

Лучший ответ:
Смотреть на дату.

Худший ответ:
Возможно, стали писать меньше проектов на Ruby, хотя текущих, среди которых есть достаточно известных - вполне прилично.
И про Паскаль тоже много чего пишут, а он все никак не помирает.
А вот потомок Паскаля, Modula-2 - куда реже упоминается и редко где используется, чего однозначно нельзя сказать о Ruby.
Вопрос: Как сверстать блок, чтобы дочерние элементы переносились на новую строку с учетом фиксированной кнопки в углу?

Лучший ответ:
На скорую рука как-то так:
snippet

- Чтобы кнопка стала внизу, помещаем её в контейнер равный двум строкам, а саму кнопку делаем в одну строку
- Чтобы верхняя строка не перекрывалась контейнером используем shape-outside с помощью которого обрезаем высоту верхней строки у самого контейнера
- Чтобы контейнер стал обтекаемым используем float

Худший ответ:
Как упомянуто в соседнем ответе, будет очень костыльно и чисто для спортивного интереса.
К тому же, есть ограничение на фиксированный размер элемента, которое вам не нужно.
<style>
    div.container
    {
      display: flex;
      flex-wrap: wrap;
      width: 770px;
      height: 90px;
      background-color: green;
      overflow: hidden;
    }
    div.container > div
    {
      width: 60px;
      height: 25px;
      background-color: #df1245;
      text-align: center;
      margin: 5px;
      padding: 5px 0;
    }
    div.container > div:nth-child(n + 22) /*этим селекторам задаем свойство сортировки элементам, которые идут после кнопки "показать еще" если контейнер будет адаптивным, придется прописывать кучу вариантов nth-child */
    {
      order: 2;
    }
    div.container > label.more
    {
      display: block;
      width: 130px;
      height: 25px;
      margin: 5px;
      padding: 5px 0;
      text-align: center;
      order: 1; /* У кнопки стоит такой индекс сортировки чтобы оказаться между видимыми и невидимыми элементами */
      background-color: #78d412;
    }
    div.container label.more span.less
    {
      display: none;
    }
    #show-more-state
    {
      display: none;
    }
    #show-more-state:checked ~ div.container
    {
      height: auto;
    }
    #show-more-state:checked ~ div.container label.more
    {
      order: 3;
      margin-left: auto;
    }
    #show-more-state:checked ~ div.container label.more span.more
    {
      display: none;
    }
    #show-more-state:checked ~ div.container label.more span.less
    {
      display: initial;
    }
  </style>
  <input id="show-more-state" type="checkbox"/> <!-- Этим чекбоксом запонимаем состояние кнопки, чтобы можно было оттолкнуться стилями от превдокласса :checked -->
  <div class="container">
    <label class="more" for="show-more-state"><span class="more">ПОКАЗАТЬ ЕЩЕ</span><span class="less">СВЕРНУТЬ</span></label>
    <div>ITEM</div>
    <div>ITEM</div>
    <div>ITEM</div>
    <div>ITEM</div>
    <div>ITEM</div>
    <div>ITEM</div>
    <div>ITEM</div>
    <div>ITEM</div>
    <div>ITEM</div>
    <div>ITEM</div>
    <div>ITEM</div>
    <div>ITEM</div>
    <div>ITEM</div>
    <div>ITEM</div>
    <div>ITEM</div>
    <div>ITEM</div>
    <div>ITEM</div>
    <div>ITEM</div>
    <div>ITEM</div>
    <div>ITEM</div>
    <div>ITEM</div>
    <div>ITEM</div>
    <div>ITEM</div>
    <div>ITEM</div>
    <div>ITEM</div>
    <div>ITEM</div>
    <div>ITEM</div>
  </div>
Вопрос: Nginx + php-fpm: где накапливается очередь для процессов и можно ли мониторить эту очередь?

Лучший ответ:
Есть у Nginx нативный мониторинг NGINX Monitoring, в частности видно количество активных и ожидающих соединений.

Худший ответ:
Подключить какой то сервер очередей, по типу того же бинсолка и и воркером в него пихать и отслеживать процесс работы
Вопрос: Как реализовать progress bar?

Лучший ответ:
Один спанчик поверх другого.
Переключайте значение ширины в зависимости от условия.
Удобно через кастомные свойства.

В теории даже на чистом CSS можно сотворить на основании :valid и/или :placeholder-showen

snippet

Худший ответ:
https://developer.mozilla.org/ru/docs/Web/HTML/Ele...

И в JS следите за изменениями в input и меняете значение в progress
Вопрос: Какие технологии лучше использовать для системы онлайн записи?

Лучший ответ:
Любые популярные: Laravel/Symfony (PHP), Spring (Java/Kotlin), Django (Python), Node.js и т.д.

Любой из этих инструментов позволит реализовать REST API, а фронту на реакте большего и не нужно.

Худший ответ:
Любые популярные: Laravel/Symfony (PHP), Spring (Java/Kotlin), Django (Python), Node.js и т.д.

Любой из этих инструментов позволит реализовать REST API, а фронту на реакте большего и не нужно.
Вопрос: Нехватка электропитания USB-Порта, что делать?

Лучший ответ:
Док-станция или  юсб-хаб с внешним питанием, не?

И вы бы хоть описали что подключает, потому что три флешки это одна история, а если три внешних hdd, то другая.

UPD: возможно в каком-то из ваших устройств поврежден кабель, попробуйте определить какое именно устройство вызывает табличку. Или по отдельности они все хорошо работают?

Худший ответ:
Все порты на материнке в основном питаются с одной usb шины, поэтому выход один - купить внешний USB хаб с независимым питанием от розетки и проверить.
Вопрос: PKI. CA шифрует своим закрытым ключом или же открытом?

Лучший ответ:
Сертификат не шифруются. Там нет секретной информации. Сертификат содержит публичный ключ и некоторые другие открытые параметры. Сертификат подписывается секретным ключом ЦА, для проверки подписи используется публичный ключ ЦА.
ЭЦП всегда делается на секретном ключе, так что здесь нет какого-то отступления от правил.

Худший ответ:
Сертификат ничем не шифруется. Сертификат - это защищенный от изменения и открытый для чтения контейнер, содержащий некую информацию, подлинность которой проверена и подписана выдавшим его Удостоверяющим Центром. 
Да-да, вся подлинность держится только на авторитете CA, больше ни на чем. 
Если же Вы запросили формирование PKCS#12 и опасаетесь, что находящийся там ключ сертификата ушел налево (вполне обоснованно, кстати) - не стоит доверять генерацию СA. Обычно в CA передают только запрос (CSR), ключа у него нет, а без ключа он навредить не может.
Вопрос: QT C++ Почему код так отличается?

Лучший ответ:
Почему код на C++ , отличается от кода на qt?
Вопрос изначально неверно сформулирован. Надо было написать "от кода, написанного с использованием Qt". На ваш взгляд есть визуальные отличия, но это потому что Qt предоставляет свои API.

Чтобы вывести Hello world! в c++ нужно : cout << "Hello world!" << endl;
А в Qt (будем считать, что это рописано в функции кнопки): qDebug() << "Hello world!";
Вариант с cout будет точно так же работать.

И вообще является ли qt отдельным языком программирования(Если да, то где лучше всего почитать про него)?
Нет, Qt -- это не отдельный язык программирования, а набор библиотек или фреймворк (зависит от того, как использовать) + набор инструментов. 
Однако же, для разработки UI, с Qt можно использовать отдельный язык, который называется QML. Но можно и не использовать.

Худший ответ:
А в Qt (будем считать, что это рописано в функции кнопки): qDebug() << "Hello world!";
И то, и другое выводит в консоль, просто в Qt для этого сделан отдельный объект со своими "фишками".

И вообще является ли qt отдельным языком программирования(
Да, является.

Если да, то где лучше всего почитать про него)?
Тут
Вопрос: Как рассчитать общую стоимость?

Лучший ответ:
Да, так и надо считать. Если диапазон входит полностью - считаете его целиком, если только его часть - то считаете долю от диапазона.

Вот демонстрационная таблица



Худший ответ:
Как можно это посчитать.

Создать словарь последовательных диапазонов с ценами.
prices = {2000: 70, 3000: 100, 3500: 150, 4000: 200, 4500: 250, 5000: 300}
Затем постепенно проходить по словарю, сравнивая текущий начальный рейтинг с ключом.
Если рейтинг ниже диапазона, то к итоговой сумме добавляем расчетную сумму из этого диапазона, т.е. (граница - рейтинг)*цена, после чего текущий рейтинг выставляем на эту границу.
И так пока не дойдем до нужного рейтинга.
Вопрос: Как обновить сертификаты Lets Encrypt?

Лучший ответ:
80 порт надо letcencrypt

Худший ответ:
подскажите какие 100% требования есть в обновлении сертификата?
Мочь подтвердить владение доменом с помощью размещения файла в каталог .well-known или добавлением DNS-записи в соответствующую зону. В первом случае нужен настроенный веб-сервер, во втором - настроенное подключение к API DNS-провайдера.
Вопрос: Как быстро усвоить большой объем информации?

Лучший ответ:
При таком раскладе я бы шел итерационно. Сначала - бегло, все, в ширь. Т.е. просто понимаем, что, к чему и как устроено на этом предприятии.  Но - повторю -  поверхностно. 
Следующая итерация - начинаем углубляться, причем в какой именно точке -  подсказывают обстоятельства (что-то случилось) или статистика (что чаше всего случалось раньше). Опять углубляемся до решения конкретной проблемы, понемногу затрагивая и смежные вопросы (задел на будущее). 
Если думаете, что человек, проработав 20 лет на одном месте не может столкнуться с новой для себя задачей , особенно в сфере ИБ - вы заблуждаетесь.  Соответственно -  комплексы "я чего-то не знаю" - отключаем сразу.  Но да, особенно первое время придется учить много и постоянно, используя статистику предыдущих проблем.  Не факт, что все запомнится, но основные опорные точки должны остаться в голове, и они в будущем, при возникновении реальной проблемы позволят вам найти решение быстрее и точнее.  

Ну и главный лозунг -  "не запоминаем, а понимаем".  Многим трудно это понять после 15 лет школьно-университетского  стиля образования. Но в этом и есть формула успеха.  Особенно в современном мире, тем более в информационных технологиях.

Худший ответ:
Для начала всю массу всей новой информации надо распределить по степени важности.
Самое важное - это то, что вам нужно прямо сейчас для исполнения своих служебных обязанностей. Вот на это и налегайте. Остальное пока по боку. Дальше у вас появятся еще какие-то задачи, так и будете изучать, постепенно.
Если что-то необходимо для выполнения обязанностей, но это что-то не основное, а просто каким-то образом используется в процессе, то изучите только минимально необходимое для работы.
Как правило, не так страшен черт, как он кажется на первый взгляд.
Вопрос: Делегаты, зачем?

Лучший ответ:
Делегат позволяет ослабить связность кода, а рассматривать их стоит вместе с событиями.
Я объясню на примере игростроя.
Популярный в сети пример: во врага попала пуля. Должно случиться сразу много вещей - нужно снять здоровье врага, выяснить, не погиб ли он, проиграть анимацию, уничтожить пулю, начислить очки игроку и еще что-то.
Если мы будем всё это вызывать напрямую, то быстро запутаемся и ошибемся. А когда будем переделывать, сломаем всё окончательно.
Вот тут нас выручат делегаты и события. Мы определим событие, которое срабатывает (вызывает свой делегат) в момент попадания пули. И соответственно, определим делегат для этого события.
Теперь каждый метод, которому это событие интересно, может подписаться на его делегат (внести себя в список вызываемых делегатом методов - их может быть больше одного).
И теперь мы можем переделывать что угодно. Главное, не забывать подписываться и отписываться.
Делегат, это как автолавка в деревне: приезжает и сигналит. Кому надо - выходит. При этом ни автолавке ни покупателям не интересно, что происходит у каждой из сторон в отдельности.

Худший ответ:
Лучше чем вот это:
Тем что класс Account ты теперь менять не можешь, это не твой код, и впиндюрить туда WriteLine соответственно тоже, но очень хочется.
Вопрос: Как научные институты передают данные?

Лучший ответ:
Если нет инета или он слабый, то возят жёсткие диски.

Худший ответ:
То есть там передаются пета байты инфы.Наивный вьюноша. На самом деле картинки которые ты видишь в вк пабликах точно такие же рисованные на компьютере как аниме-хуманизация черной дыры. 
Единственная разница - картинку делают на основании более-менее реальных данных, а исходные данные для них содержат 3 картинки в ч/б, размером 200 на 200 точек. Даже видео с фреймрейтом в 1 кадр в секунду (а больше для таких наблюдений просто бесполезно, можно и раз в сутки снимать и  норм, разницы не увидишь из-за погрешности и шума) будет занимать дай бог мегабайт. Так что про фуры с дисками - перебор, скорее дрон с дискеткой на 5.25", ну или на крайняк 2.5".
Вопрос: Как рандомно вывести строки из текстового файла по определенному ключу?

Лучший ответ:
$rows= file_get_contents("ваш файл.txt");
$rows = mb_split("\r\n",$rows);
$rows= array_values(array_filter($rows,function($e){return mb_split("\|",$e)[1] == "busfor";}));

$onlyUnique = true;//доставать только уникальные
$result = [];
for($i = 0; $i < 7 && count($rows) > 0;$i++){	
	$inx =rand(0,count($rows)-1);
	$result[] = $rows[$inx];
	if($onlyUnique)
		array_splice($rows,$inx,1);
}
var_dump($result);

Худший ответ:
$rows= file_get_contents("ваш файл.txt");
$rows = mb_split("\r\n",$rows);
$rows= array_values(array_filter($rows,function($e){return mb_split("\|",$e)[1] == "busfor";}));

$onlyUnique = true;//доставать только уникальные
$result = [];
for($i = 0; $i < 7 && count($rows) > 0;$i++){	
	$inx =rand(0,count($rows)-1);
	$result[] = $rows[$inx];
	if($onlyUnique)
		array_splice($rows,$inx,1);
}
var_dump($result);