Awk-подобный BEGIN и END с командной строкой Ruby - PullRequest
2 голосов
/ 02 декабря 2011

Одна из замечательных особенностей Ruby - это его способность вести себя как типичные инструменты командной строки Unix, например, (как в примере из официальной документации):

$ echo "matz" | ruby -pe '$_.upcase!'
MATZ

Awk, с другой стороны, может выполнять агрегирование по строкам из стандартного ввода, например, суммируя последовательность чисел:

$ for (( i=0; $i < 50; i++ )); do echo $i; done | awk 'BEGIN { tot=0; } { tot += $0 } END { print tot }'
1225

Я хотел бы знать, возможно ли заставить Ruby делать то, что достигается с помощью блоков Awk BEGIN и END, описанных выше, чтобы иметь возможность выполнять аналогичные операции агрегирования.

Ответы [ 2 ]

5 голосов
/ 02 декабря 2011
seq 49 | ruby -pe 'BEGIN { $tot=0 }; $tot += $_.to_i; END { print $tot }'
2 голосов
/ 02 декабря 2011

На самом деле ruby ​​имеет поддержку блоков BEGIN / END. например см. этот блог: http://burkelibbey.posterous.com/rubys-other-begin

Еще немного документации: http://www.ruby -doc.org / docs / ProgrammingRuby / html / language.html # UA

HTH

...