如何在一行ruby-e中洗牌一个文件

如何在一行ruby-e中洗牌一个文件,ruby,Ruby,我有以下文件: A B C ... 我希望ruby-e读取文件,将其洗牌,然后标准输出,例如: P C A ... 我该怎么做呢。到目前为止,我已经得到了ruby-e'puts$u'filename.txtruby-ne'BEGIN{data=[]};数据创建一个测试文件: ruby -ne 'BEGIN { data = [] }; data << $_; END {puts data.shuffle}' filename.txt str = "three\nblind\nm

我有以下文件:

A
B
C
...
我希望
ruby-e
读取文件,将其洗牌,然后标准输出,例如:

P
C
A
...
我该怎么做呢。到目前为止,我已经得到了
ruby-e'puts$u'filename.txt

ruby-ne'BEGIN{data=[]};数据创建一个测试文件:

ruby -ne 'BEGIN { data = [] }; data << $_; END {puts data.shuffle}' filename.txt
str = "three\nblind\nmice\n"
File.write('data_in', str)
  #= 17
从命令行

如果不限于Ruby1:

使用Ruby

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

我明白了。这不适用于OSX,但有一个问题

您可以从读取到数组中的所有行:

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

ruby-e'put$
ruby-e'put'shuf`'
:)@Ry-hahaha!聪明,但这在MacOS上不起作用:)请检查我自己的答案,我认为Ruby可以在任何地方工作。嗨,虽然这个解决方案可以工作,但它需要多个不同的执行,创建一个临时文件,需要一个临时文件,到目前为止,创建临时文件后不会清理:)。虽然它是“一行”,但它也是一行,但执行了多次。它是有效的,但与问题的内容不同,问题是“
ruby-e
读取文件、洗牌并标准输出”:)谢谢您的帮助!以上评论与我的原始答案有关,这反映了对问题的误读。ARGF也适用于我下面的答案,原因相同:)但您的解决方案更短,更容易阅读!您能否详细说明一下为什么使用splat操作符(
*
)并将其包装在一个数组中(
[…]
)?(“我对Ruby了解不多,”他说)@UpvoteMe:结果比
.to_a
短了一个字符。我不知道它的存在,但它在Python中是存在的,所以我尝试了:DOh,对!因为在洗牌之前需要将其转换为数组,这
$
ruby -e "puts ARGF.readlines.shuffle.join" data_in
blind
mice
three
ruby -e 'puts $<.to_a.shuffle' filename.txt
ruby -e'puts [*$<].shuffle' filename.txt