Я сомневаюсь, что проблема в том, что ruby читает весь файл в памяти. Посмотрите на использование памяти и диска при выполнении команды для проверки.
Я предполагаю, что основная причина в том, что cut написан на C и делает только одну вещь, поэтому он, вероятно, скомпилирован до самого металла. Вероятно, это не намного больше, чем вызов системных вызовов.
Однако версия ruby делает много вещей одновременно. Вызов метода в ruby намного медленнее, чем вызов функции C.
Помните, старость и предательство побеждают молодость и мастерство в Unix: http://ridiculousfish.com/blog/archives/2006/05/30/old-age-and-treachery/