On Thu, 9 Dec 2004 01:37:36 +0900
Hello,
Is there method in ruby like "uniq -c" command in Unix ?
uniq -c, --count prefix lines by the number of occurrences
Thnx
You can implement uniq -c like this:
#!/usr/bin/ruby
(ARGF.read.split($/) << nil).inject([nil, 0]) do | (last_line, count), line |
if last_line and line != last_line
puts(("%7d " % count) + last_line)
count = 0
end
[line, count+1]
end
Use:
bschroed@black:~/svn/projekte/ruby-things $ cat send.rb | uniq -c
1 class A
1 def send_it method_name
1 send(method_name, "Send from #{self}")
1 end
1 end
1
1 class B < A
1 def select(msg)
1 puts "Received: #{msg}"
1 end
1 end
1
1 b = B.new
1 b.send_it
select)
bschroed@black:~/svn/projekte/ruby-things $ cat send.rb | ./uniq-count
1 class A
1 def send_it method_name
1 send(method_name, "Send from #{self}")
1 end
1 end
1
1 class B < A
1 def select(msg)
1 puts "Received: #{msg}"
1 end
1 end
1
1 b = B.new
1 b.send_it
select)
bschroed@black:~/svn/projekte/ruby-things $ cat send.rb | sort | uniq -c
2
1 b = B.new
1 b.send_it
select)
1 class A
1 class B < A
1 def select(msg)
1 def send_it method_name
2 end
2 end
1 puts "Received: #{msg}"
1 send(method_name, "Send from #{self}")
bschroed@black:~/svn/projekte/ruby-things $ cat send.rb | sort | ./uniq-count
2
1 b = B.new
1 b.send_it
select)
1 class A
1 class B < A
1 def select(msg)
1 def send_it method_name
2 end
2 end
1 puts "Received: #{msg}"
1 send(method_name, "Send from #{self}")
regards,
Brian