如果列小于4打印列3,如何红宝石?

时间:2017-04-21 17:16:06

标签: ruby linux

我正在试图使用此代码但不能正常工作

  ruby -a -F';' -ne   if $F[2]<4    'puts $F[3]'  ppp.txt

这是我的档案

mmm;2;nsfnjd
sadjjasjnsd;6;gdhjsd
gsduhdssdj;3;gsdhjhjsd

做什么请帮帮我

2 个答案:

答案 0 :(得分:1)

首先,不要像对某种花哨的Perl那样对待Ruby并编写这样的脚本,为了清楚起见,我们将它扩展为Ruby代码等价物:

$; = ';'

while gets
  $F = $_.split

  if $F[2]<4
    puts $F[3]
  end
end

您的原始代码不起作用,因为它不是有效的Ruby代码而无法工作,而且,您没有正确引用它来通过-e评估术语。试着运行它我得到:

-bash: 4: No such file or directory

你也假设数组是1索引的,但事实并非如此。它是0索引的。此外,Ruby将整数值视为与字符串完全不同,从不等效,不自动转换。因此,您需要致电.to_i进行转换。

这是一个重写程序,可以完成这项任务:

File.open(ARGV[0]) do |fi|
  fi.readlines.each do |line|
    parts = line.chomp.split(';')

    if parts[1].to_i < 4
      puts parts[2]
    end
  end
end

答案 1 :(得分:-1)

我用这个解决了

 ruby -a -F';' -ne   '   if $F[1] < "4"  ;puts  $F[2] end '  ppp.txt