На моей машине ваш массив ldf после вызовов df выдает следующее:
irb(main):011:0> ldf
=> [[{"device"=>"/dev/sda5", "size"=>"49399372", "mount"=>"/", "avail"=>"22728988", "used"=>"24161036", "capp"=>"52%"}], [{"device"=>"/dev/sda5", "inodes"=>"3137536", "mount"=>"/", "iusep"=>"13%", "inodesavail"=>"2752040", "inodesused"=>"385496"}]]
Наиболее гибкий подход к объединению такой структуры, вероятно, примерно такой:
irb(main):013:0> ldf.flatten.inject {|a,b| a.merge(b)}
=> {"device"=>"/dev/sda5", "inodes"=>"3137536", "size"=>"49399372", "mount"=>"/", "avail"=>"22728988", "inodesavail"=>"2752040", "iusep"=>"13%", "used"=>"24161036", "capp"=>"52%", "inodesused"=>"385496"}
Некоторые программисты ruby недовольны этим использованием inject, но мне это нравится, поэтому ваш пробег может отличаться.
Что касается того, как сделать ваш код более похожим на ruby, я предлагаю вам поговорить с опытным rubyist, которого вы, возможно, знаете по своему коду, чтобы помочь вам переписать его так, чтобы он следовал хорошим стилем и передовым методам. Возможно, это было бы предпочтительнее, чем просто попросить кого-то переписать это здесь для вас.
Удачи!