Как перетасовать строки в блокноте

Обновлено: 01.07.2024

Я хочу случайным образом перетасовать строки текстового файла и создать новый файл. В файле может быть несколько тысяч строк.

Как это сделать с помощью cat , awk , cut и т. д.?

19 ответов 19

Вы можете использовать shuf . По крайней мере, в некоторых системах (похоже, не в POSIX).

Как указал jleedev: sort -R также может быть вариантом. По крайней мере, в некоторых системах; ну вы поняли картину. Было указано, что sort -R на самом деле не перемешивает, а сортирует элементы в соответствии с их хеш-значением.

[Примечание редактора: sort -R почти перемешивает, за исключением того, что дублирующиеся строки/ключи сортировки всегда оказываются рядом друг с другом. Другими словами: только с уникальными входными строками/клавишами это настоящая перетасовка. Хотя верно то, что порядок вывода определяется хэш-значениями, случайность исходит из выбора случайной хэш-функции — см. руководство.]

shuf и sort -R немного отличаются, потому что sort -R случайным образом упорядочивает элементы в соответствии с их хэшем, то есть sort -R собирает повторяющиеся элементы вместе, а shuf перемешивает все элементы случайным образом.

sort -R и shuf следует рассматривать как совершенно разные. sort -R является детерминированным. Если вы вызовете его дважды в разное время на одном и том же входе, вы получите один и тот же ответ. shuf , с другой стороны, производит рандомизированный вывод, поэтому он, скорее всего, даст разные результаты на одном и том же входе.

Это неправильно. "sort -R" использует другой случайный хеш-ключ каждый раз, когда вы его вызываете, поэтому каждый раз он выдает разные результаты.

Примечание о случайности: согласно документам GNU, «По умолчанию эти команды используют внутренний генератор псевдослучайных чисел, инициализированный небольшим количеством энтропии, но может быть направлен на использование внешнего источника с параметром --random-source=file. вариант."

Однострочник Perl был бы простой версией решения Maxim

Это был единственный скрипт на этой странице, который возвращал НАСТОЯЩИЕ случайные строки. Другие awk-решения часто печатали повторяющийся вывод.

Но будьте осторожны, потому что на выходе вы потеряете одну строку :) Она просто соединится с другой строкой :)

@JavaRunner: я предполагаю, что вы говорите о вводе без завершающего \n ; да, это \n должно присутствовать - и обычно есть - иначе вы получите то, что описываете.

Этот ответ дополняет многие существующие ответы следующими способами:

Существующие ответы упакованы в гибкие функции оболочки:

  • Функции принимают не только стандартный ввод, но и аргументы имя файла
  • .
  • Функции предпринимают дополнительные шаги для обработки SIGPIPE обычным способом (тихое завершение с кодом выхода 141 ), а не шумным прерыванием. Это важно при передаче вывода функции в канал, который закрывается раньше, например, при передаче в head .

Проводится сравнение производительности.

  • Функция, совместимая с POSIX, на основе awk , sort и cut , адаптированная из собственного ответа OP:
  • Функция на основе Perl — адаптировано из ответа Moonyoung Kang:
  • Функция на основе Python, адаптированная из ответа scai:

См. нижний раздел для версии этой функции для Windows.

  • Функция на основе Ruby, адаптированная из ответа Хоффманка:

Сравнение производительности:

Примечание. Эти цифры были получены для iMac конца 2012 года с процессором Intel Core i5 3,2 ГГц и Fusion Drive под управлением OSX 10.10.3. Хотя время будет варьироваться в зависимости от используемой ОС, спецификаций машины, используемой реализации awk (например, версия awk BSD, используемая в OSX, обычно медленнее, чем awk GNU и особенно mawk ), это должно обеспечить общее ощущение относительности. производительность.

Входной файл представляет собой файл из 1 миллиона строк, созданный с помощью команды seq -f 'line %.0f' 1000000 .
Время указано в порядке возрастания (сначала самое быстрое):

  • шуф
    • 0,090 с
    • 0,289 с
    • 0,589 с
    • 1,342 с с Python 2.7.6; 2.407 с (!) с Python 3.4.2
    • 3.003 с BSD awk ; 2,388 с с GNU awk (4.1.1); 1,811 с ​​с мауком (1.3.4);

    Для дальнейшего сравнения решения, не упакованные как функции выше:

    • sort -R (не перетасовка, если есть повторяющиеся строки ввода)
      • 10,661 с – кажется, что выделение большего объема памяти не имеет значения
      • 24,229 сек.
      • 32,593 с.

      Выводы:

      • Если можете, используйте shuf — это самый быстрый способ.
      • Хорошо работает Ruby, за ним следует Perl.
      • Python заметно медленнее, чем Ruby и Perl, и, сравнивая версии Python, 2.7.6 немного быстрее, чем 3.4.1
      • В крайнем случае используйте совместимую с POSIX комбинацию awk + sort + cut; какую реализацию awk вы используете (mawk быстрее GNU awk, BSD awk медленнее).
      • Держитесь подальше от sort -R , циклов bash и Scala.

      Windows версии решения Python (код Python идентичен, за исключением различий в кавычках и удалении операторов, связанных с сигналами, которые не поддерживаются) в Windows):

      С помощью Notepad++ очень просто рандомизировать список строк, переходя от организованного списка к случайному, как показано выше.

      Notepad++ рандомизирует строки

      С помощью Notepad++ очень просто рандомизировать список строк, переходя от организованного списка к случайному, как показано выше.

      Для этого убедитесь, что у вас установлен подключаемый модуль Python Script. Если нет, см. раздел Установка подключаемого модуля Python Script в Notepad++ с помощью диспетчера подключаемых модулей. Затем мы установим RandomizeLines.py для Notepad++ с github.

      Откройте сведения RandomizeLines.py на GitHub и скопируйте содержимое в буфер обмена.

      Создайте файл RandomizeLines.py в локальной папке Notepad++ > плагины > PythonScript > папка скриптов

      Откройте этот файл, например, с помощью Notepad++ и вставьте код из сведений RandomizeLines.py на github

      Перезапустите Notepad++ и в файле, содержащем строки для рандомизации, откройте (и, в конечном итоге, выделенный текст, если вы не хотите рандомизировать весь файл), выберите параметр RandomizeLines в меню Плагины => Python Script => Scripts< /p>

      И наслаждайтесь результатом!

      Перемешать строки в текстовом файле Windows

      Лучший способ перетасовать строки в текстовом файле в Windows – использовать инструмент для перетасовки строк в блокноте Notepad++.

      Загрузите Notepad++, установите Python для перетасовки строк в файловых файлах и используйте Notepad++ для рандомизации строк в любом текстовом файле.

      Как сортировать в Notepad++

      Вы можете легко сортировать в Notepad++, используя TextFX > Инструменты TextFX > сортировать строки, с учетом или без учета регистра, а также по возрастанию или убыванию.

      Как рандомизировать файлы в папке

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

      Как сортировать текст в Notepad++

      Чтобы сортировать текст в Notepad++, установите плагин TextFX tools. Затем выделите текст, который хотите отсортировать, в Notepad++ и перейдите в меню TextFX > TextFXTools > Сортировать строки.

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

      Как отсортировать строки большого текстового файла так, чтобы все они были случайными.

      я использую Emeditor Notepad++

      если есть способ с регулярными выражениями, добавьте и его, если возможно

      Небольшая часть строк примера:

      1 Ответ 1

      TL;DR

      Начиная с Notepad++ v7.9, Notepad++ имеет функцию под названием Случайный порядок строк, которая делает то же самое, что и ответ, приведенный ниже (т. е. рандомизирует порядок строк в заданном документе или выборе) .

      Доступ к нему можно получить, выбрав Правка → Операции с линиями → Произвольный порядок строк.

      Исходный ответ

      Насколько я могу судить, ни одна из программ не имеет встроенной функции рандомизации строк (тем более той, которая использует регулярное выражение). Однако у обоих есть потенциальная возможность поддерживать такие функции с помощью подключаемых модулей.

      К сожалению, я не смог найти никаких готовых решений для EmEditor, но есть подключаемый модуль Notepad++ под названием Python Script, который поддерживает другой внешний скрипт, который может выполнять базовую рандомизацию строк из Notepad++.

      Что касается критерия «большой» файл, у Notepad++ могут возникнуть проблемы с файлами большего размера (хотя открытие файла размером около 500 МБ, безусловно, возможно без проблем). Если вы обнаружите какие-либо ошибки, вам может потребоваться разбить файл на более мелкие фрагменты.

      Плагин Python Script и RandomizeLines.py

      Сначала загрузите и установите подключаемый модуль Python Script с помощью диспетчера подключаемых модулей Notepad++:

      Напр. Установка подключаемого модуля скрипта Python в диспетчере подключаемых модулей Notepad++

      Снимок экрана диспетчера подключаемых модулей в Notepad++, отображающий алфавитный список вариантов подключаемых модулей . Слева от записи плагина отмечен флажок, который просто читается как Python Script. Под списком находится текстовое поле с прокруткой, отображающее общую информацию о плагине. Ниже находится кнопка «Установить» в правом нижнем углу диалогового окна менеджера. . Эта кнопка запускает загрузку и установку любых отмеченных записей плагинов». /><br /></p>
<p>После установки плагина вам потребуется перезапустить Notepad++. После перезапуска плагин должен появиться в разделе <em>Плагины</em> → <em>Python Script</em>.</p>
<p>Затем загрузите этот скрипт Клонировать или скачать → Загрузить ZIP-файл). Извлеките файл и выберите файл RandomizeLines.py:

      Напр. RandomizeLines Master — извлечено

      Скриншот извлеченного файлового архива NPP RandomizeLines Master с двумя элементами файлов . Первый элемент файла с названием RandomizeLines.py выделен в файловом менеджере Windows для выбора». /><br /></p>
<p>Скопируйте <em>RandomizeLines.py</em> в свой <em>Notepad++</em> → <em>Плагины</em> → <em>Скрипты Python</em> → <em>Скрипты</ em> папка. Это может быть не так, как показано, в зависимости от вашей установки Notepad++.</p>
<p><em>Напр. RandomizeLines — Папка плагинов Notepad++</em></p>
<p><img class= в группу "Утилиты", нажмите кнопку "Случайный порядок", а затем нажмите "Перемешать ячейки".

    • Панель "Перемешать" появится в левой части книги.
    • Нажмите кнопку "Перемешать".
    • Как сортировать слова в Notepad++?

      Чтобы получить словарную сортировку (a-z), используйте пункт меню Правка -> Операции со строками -> Сортировать строки лексикографически. Есть две версии – восходящая и нисходящая. Существуют и другие типы сортировки, в которых он пытается сначала преобразовать выбранные строки в числа перед сортировкой.

      Как перемешать список?

      1. Создайте список. Создайте список с помощью конструктора list().
      2. Импорт случайного модуля. Используйте модуль random для случайного создания списка.
      3. Используйте функцию shuffle() случайного модуля.
      4. Отобразить перемешанный список.
      5. Получить перетасованный список вместо изменения исходного списка.
      6. При необходимости настройте перетасовку.

      Есть ли способ перетасовать строки в файле?

      Чтение, перетасовка строк файла и печать их на терминале. Вывод можно перенаправить в файл с помощью оператора перенаправления (> или >>). Если вы ищете команду быстрого перемешивания, лучшим выбором будет команда shuf, или вы можете повеселиться, используя другие способы перетасовки строк в файле.

      Что является примером функции перемешивания?

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

      Как перетасовать текст в случайном порядке?

      Просто загрузите свой текст и переставьте его строки в случайном порядке. Здесь нет рекламы, всплывающих окон или ерунды, просто случайное перемешивание строк. Загрузите свои линии, получите перетасованные линии. Создан разработчиками из команды Browserling. анонс наверху! Мы только что запустили новый сайт — Online Fractal Tools — утилиты для создания фракталов. Проверьте это!

      Какой инструмент лучше всего перемешивает текст?

      Этот инструмент изменяет порядок строк в заданном тексте. Для этого он использует перетасовку Кнута, также известную как алгоритм перетасовки Фишера-Йейтса. Просто и легко! В этом примере перемешиваются все строки предоставленного текста. Вы можете передать входные данные этому инструменту с помощью ?input аргумента запроса, и он автоматически вычислит выходные данные.

      Как найти строку в файле в Windows?

      Как искать слова в файлах в Windows 7

      1. Открыть проводник Windows.
      2. Используя меню файлов слева, выберите папку для поиска.
      3. Найдите окно поиска в правом верхнем углу окна проводника.
      4. В поле поиска введите content:, а затем искомое слово или фразу (например, content:yourword)

      Как рандомизировать строки в блокноте?

      1 ответ. Начиная с Notepad++ v7. 9, Notepad ++ имеет функцию под названием «Случайный порядок строк», которая делает то же самое, что и ответ, приведенный ниже (т. Е. Рандомизирует порядок строк в данном документе или выборе). Доступ к нему можно получить, выбрав «Правка» → «Операции с линиями» → «Случайный порядок строк».

      Как найти текстовый файл в командной строке?

      Как искать файлы из командной строки DOS

      1. В меню «Пуск» выберите «Все программы» → «Стандартные» → «Командная строка».
      2. Введите CD и нажмите Enter.
      3. Введите DIR и пробел.
      4. Введите имя файла, который вы ищете.
      5. Введите еще один пробел, а затем /S, пробел и /P.
      6. Нажмите клавишу Enter.
      7. Просмотрите экран, полный результатов.

      Есть ли способ обрезать текстовый файл из командной строки?

      У меня есть текстовый файл, содержащий несколько сотен строк, например. Есть ли способ обрезать все строки, например. взять :xxxxxxxxxxxxxxx из строки, чтобы просто оставить xxxxxxx.xxx ? Посмотреть здесь. Что ж, поскольку очевидно, что кроме powershell, в Windows нет «стандартного» инструмента для этого, вы можете запустить свой собственный:

      Есть ли способ удалить строки из текстового файла?

      Может ли текстовый файл иметь несовместимые окончания строк?

      Обратите внимание, что текстовые файлы могут иметь несовместимые окончания строк. Ваша программа не должна задыхаться от этого. Использование ReadLineon a StreamReader (и подобных методов) автоматически позаботится о любом возможном окончании строки. Если вы вручную читаете строки из файла, обязательно допускайте любые окончания строк, даже если они несовместимы.

      Как найти и заменить строки в текстовом файле?

      Этот метод использует регулярные выражения для поиска и замены строк, содержащих слово или фразу. Этот метод очень эффективен, так как вы можете сопоставить практически все (например, слова, «начинающиеся с», или строки, которые имеют определенный «шаблон»). Откройте текстовый файл с помощью Notepad++. Нажмите Ctrl + F, чтобы открыть диалоговое окно "Найти и заменить".

      Как выбрать случайную строку из текстового файла в Python?

      Как выполнить случайную сортировку в Word?

      Выделите всю таблицу и выберите в меню Таблица > Сортировка. Нажмите OK…. Теперь вопросы можно рандомизировать снова и снова, просто:

      1. Открытие исходного файла (с пустым столбцом)
      2. Вставка случайно сгенерированного числового списка слева.
      3. Сортировка всей таблицы по этому новому списку.

      Как случайным образом выбрать строку из текстового файла в Java?

      1. Создать RandomAccessFile, файл.
      2. Получите длину этого файла, filelen, вызвав метод file. длина()
      3. Сгенерировать случайное число pos от 0 до filelen.
      4. Файл вызова. seek(pos) для поиска случайной позиции.
      5. Файл вызова. readLine(), чтобы добраться до конца текущей строки.
      6. Прочитайте следующую строку, вызвав file. снова readLine().

      Как напечатать строку из текстового файла в Python?

      Использовать файл. readlines() для печати каждой строки текстового файла

      1. a_file = open("sample.txt")
      2. lines = a_file. строки чтения()
      3. для строки в строке:
      4. печать(строка)
      5. a_file.

      Какой самый простой способ рандомизировать текстовые строки?

      Самый простой в мире генератор случайных строк текста. Просто вставьте свой текст в форму ниже, нажмите кнопку «Случайный порядок», и вы получите перемешанные строки. Нажмите кнопку, чтобы получить случайные линии. Никакой рекламы, ерунды или мусора. Объявление. Мы только что запустили DEVURLS – отличный агрегатор новостей для разработчиков.

      Как рандомизировать строки в файле в Linux?

      Использование команды сортировки В большинстве случаев мы используем команду сортировки для перестановки строк в файле в определенном предустановленном порядке. Однако мы можем использовать команду сортировки вместе с параметром -R для случайной сортировки: $ sort -R input.txt Строка с текстом.

      Как получить случайные строки в Excel?

      Просто вставьте свой текст в форму ниже, нажмите кнопку «Случайный порядок», и вы получите перемешанные строки. Нажмите кнопку, чтобы получить случайные линии.

      Как вывести несколько строк в CMD?

      Чтобы отобразить сообщение длиной в несколько строк без отображения каких-либо команд, вы можете включить в свою пакетную программу несколько команд echo после команды echo off. После отключения эха командная строка не отображается в окне командной строки. Чтобы отобразить командную строку, введите echo on.

      Какая команда используется для создания нескольких строк?

      Командная строка Windows (cmd.exe) позволяет использовать символ ^ (Shift + 6) для обозначения продолжения строки.

      Как вы отображаете сообщение в пакетном файле?

      Как отобразить текст с помощью BAT-файла

      1. Нажмите «Пуск» в Windows, а затем нажмите «Выполнить». Введите «cmd» и нажмите «ОК», чтобы открыть окно командной строки.
      2. Введите «изменить» и нажмите «Ввод».
      3. Введите в открытом окне следующие команды: echo off.
      4. Нажмите «Файл», а затем «Сохранить». Введите «my_batch».
      5. Введите «my_batch».

      Что такое эхо-командная строка?

      В вычислительной технике echo – это команда, которая выводит строки, передаваемые в качестве аргументов. Эта команда доступна в различных оболочках операционных систем и обычно используется в сценариях оболочки и пакетных файлах для вывода текста состояния на экран или в компьютерный файл или в качестве исходной части конвейера.

      У меня есть очень большой файл notepad ++ (более 100 000 строк), и мне интересно, есть ли способ изменить порядок строк таким образом, чтобы каждая строка менялась случайным образом.

      Если вы хотите сослаться на этот комментарий где-то еще в этом проекте, скопируйте и вставьте следующую ссылку:

      Мне также нужно взять эти строки в кавычки. Я мог бы найти каждую строку с .* в регулярном выражении, но я не уверен, чем ее заменить, чтобы каждая строка была заключена в кавычки.

      Если вы хотите сослаться на этот комментарий где-то еще в этом проекте, скопируйте и вставьте следующую ссылку:

      Для второго сообщения: замените на "\0" -> двойную кавычку, весь шаблон соответствия и вторую двойную кавычку.

      По поводу первого вопроса: обычно это работа для сценариста. Есть плагины, поддерживающие разные языки скриптов — PHP, Python, JS — или можно просто загнать внешний скриптовый движок из N++ с помощью NppExec.

      Если вы хотите сослаться на этот комментарий где-то еще в этом проекте, скопируйте и вставьте следующую ссылку:

      Я нашел очень простой скрипт, который, как кто-то утверждал, сделает это:

      Но, честно говоря, я не уверен, для какого языка сценариев он предназначен.Сайт, который я нашел на siad, посвящен CLI (интерфейсу командной строки), но не упоминает, какой именно язык.

      Если эта команда выглядит так, как будто она исходит из определенного языка программирования, и у кого-нибудь есть идеи, какой из них я хотел бы выяснить.

      Если вы хотите сослаться на этот комментарий где-то еще в этом проекте, скопируйте и вставьте следующую ссылку:

      <р>1. Цитирование полных строк

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

      Переместите курсор в верхнюю часть документа (Ctrl+Home) или установите флажок "Обтекание".

      В диалоговом окне поиска/замены текстовых эффектов (Ctrl+R):

      - в поле поиска нажмите Ctrl+M или Ctrl+Enter

      - в поле "Заменить" введите ", нажмите Ctrl+M или Ctrl+Enter и снова введите ".

      Нажмите «Найти», затем «Заменить остальное».

      Теперь вам нужно только добавить символ двойной кавычки в самом начале и конце (Ctrl+End) вашего документа.

      Это пропускает поиск полных строк и заменяет каждую из них чуть больше, чем ее исходное содержание.

      <р>2. Отсортировка файла

      Для систем, отличных от Windows, существует утилита unsort, но я думаю, что она не очень поможет.

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

      Вы можете сделать это в Блокноте, выделив все строки в конце документа (Ctrl+End), нажав и удерживая клавишу Shift, а затем Ctrl+Home и переместив курсор в нужную позицию в первой строке. Затем вы можете использовать любую из опций сортировки Text FX «(в столбце)». Имейте в виду, что для большого файла это может занять некоторое время!

      Вы также можете использовать утилиту командной строки/запроса Windows sort.exe. Откройте окно командной строки (Пуск/Выполнить: cmd) и введите sort /?. После этого вы получите текст справки.

      Вы можете использовать следующую команду:

      Если вы хотите сослаться на этот комментарий где-то еще в этом проекте, скопируйте и вставьте следующую ссылку:

      Читайте также: