Как перетасовать файл в одну строку ruby ​​-e - PullRequest
1 голос
/ 17 июня 2019

У меня есть следующий файл:

A
B
C
...

Я хочу, чтобы ruby -e прочитал файл, перемешал его и вывел стандартный вывод, например, так:

P
C
A
...

Как мне это сделать.До сих пор я получил ruby -e 'puts $_' filename.txt.

Ответы [ 3 ]

6 голосов
/ 17 июня 2019

Вы можете прочитать все строки из ARGF в массив:

ruby -e 'puts $<.to_a.shuffle' filename.txt

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

ruby -e'puts [*$<].shuffle' filename.txt

Он также будет принимать ввод на стандартном вводе без имени файла.

1 голос
/ 17 июня 2019

Создать тестовый файл:

str = "three\nblind\nmice\n"
File.write('data_in', str)
  #= 17

Из командной строки.

Если не ограничен Ruby 1 :

cat data_in|shuf
mice
three
blind

Используя Ruby,

ruby -e "puts STDIN.readlines.shuffle.join" < data_in
mice
blind
three

или

ruby -e "puts ARGF.readlines.shuffle.join" data_in
blind
mice
three

1 См. doc .Это не работает с OS X, но есть fix .

0 голосов
/ 17 июня 2019
ruby -ne 'BEGIN { data = [] }; data << $_; END {puts data.shuffle}' filename.txt

Это делает следующее:

  • Добавляет флаг -n, который оборачивает ввод в while gets(); ... end;
  • Используйте BEGIN для создания начального data переменная, которая используется для всех циклов
  • Перемещает данные в переменную data в каждом цикле
  • Используйте END для вывода окончательной переменной data.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...