我有一个命令行脚本,它返回如下内容:
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中的值作为参数传递?
答案 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