我有以下文件:
A
B
C
...
我希望ruby -e
读取文件,对其进行随机播放并对其进行标准输出,例如:
P
C
A
...
我该怎么做。到目前为止,我已经到ruby -e 'puts $_' filename.txt
。
答案 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
答案 2 :(得分:0)
ruby -ne 'BEGIN { data = [] }; data << $_; END {puts data.shuffle}' filename.txt
这将执行以下操作:
-n
标志,该标志将输入包装在while gets(); ... end;
BEGIN
创建一个初始data
变量,该变量在每次循环运行中都共享data
变量中END
输出最后一个data
变量。