如何在单行ruby -e中随机播放文件

时间:2019-06-17 01:44:38

标签: ruby

我有以下文件:

A
B
C
...

我希望ruby -e读取文件,对其进行随机播放并对其进行标准输出,例如:

P
C
A
...

我该怎么做。到目前为止,我已经到ruby -e 'puts $_' filename.txt

3 个答案:

答案 0 :(得分:6)

您可以将ARGF中的所有行读入数组:

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

或通过划线以使其更短:

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

它还将接受没有文件名的stdin输入。

答案 1 :(得分:1)

创建测试文件:

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

答案 2 :(得分:0)

ruby -ne 'BEGIN { data = [] }; data << $_; END {puts data.shuffle}' filename.txt

这将执行以下操作:

  • 添加-n标志,该标志将输入包装在while gets(); ... end;
  • 使用BEGIN创建一个初始data变量,该变量在每次循环运行中都共享
  • 在每个循环中将数据拖入data变量中
  • 使用END输出最后一个data变量。