在命令行中使用Ruby,如何获取循环遍历每个列的特定列

时间:2011-05-30 21:26:52

标签: ruby enumeration

我有一个命令行脚本,它返回如下内容:

col1 col2 col3 col4 col5
a    b    c    d    e
a1   b2   c2   d2   e2
a3   b3   c3   d3   e3
..
..
.

现在我想从col3中获取值,然后为第3列中的每一行调用另一个命令行脚本。

我知道ruby有一个系统(“..”)函数,它将在控制台中运行脚本。

我的命令行脚本非常类似于调用类似的东西:

system("ls -l")

现在我怎样才能捕获第3列,并迭代每个值并触发另一个脚本,将col#3中的值作为参数传递?

2 个答案:

答案 0 :(得分:2)

IO.popen('ls -l').lines.map(&:split)[1..-1].transpose[2].each do |e|
  puts '>>' + e + '<<'
end

我应该警告你,如果你把它带到显而易见的下一步并在块中构建对“system”甚至popen的调用,你将会产生代码注入风险。在这种特定情况下,只有文件所有者需要字母数字结果,只需过滤那些字符就足够了。

答案 1 :(得分:0)

你可以拥有像

这样的东西
#!/usr/bin/env ruby
cols, take_col = ARGV[0],ARGV[1]
puts $stdin.read.split.drop(cols).select.with_index{|x, i| i % cols == take_col - 1}

在一个名为take-col的文件中,并将其与管道一起使用,如

$ ls-like-cmd | take-col 5 3 | next-cmd