Я пытаюсь сделать awk как инструмент, который использует Rebol 3 для обработки больших текстовых файлов с помощью труб и инструментов bash. У меня проблема с чтением STDIN по строчке в Rebol 3?Rebol 3: чтение STDIN эффективно по строкам (чтобы сделать awk как инструмент)
Например, эта команда оболочки производит 3 линии:
$ (echo "first line" ; echo "second line" ; echo "third line")
first line
second line
third line
Но вход слово в Rebol читает все 3 линии одновременно. Я ожидал бы, что он остановится на новой линии, поскольку он остановится, если вы используете ввод интерактивно.
r3 --do 'while [ x: input ] [ if empty? x [ break ] print x print "***" ]'
abcdef
abcdef
***
blabla
blabla
***
Но когда я запускаю его все вместе, он считывает весь ввод сразу. Я мог прочитать все это сразу и разделить на строки, но я хочу, чтобы он работал «потоковым» образом, как обычно cat во многих 1000-х строках.
$ (echo "first line" ; echo "second line" ; echo "third line") \
| r3 --do 'while [ x: input ] [ if empty? x [ break ] print x print "***" ]'
first linesecond linethird line
***
Я также посмотрел на источник ввода сделать подобную функцию. Я мог читать символ на символ в , а, и проверять на новые строки, но это не кажется эффективным.
Хорошо находкой о 'прочитать lines' буферизацию/на STDIN. Однако он не работает полностью для меня в MacOS (OSX) :(Вместо «block!» Он возвращает «двоичный!» Из 34815 байтов (до тех пор, пока STDIN не будет исчерпан). NB. Фактически '/ lines' (и '/ string') ничего не делают на MacOS :( – draegtun