Как избежать переноса в вывод bc

В /etc/fetchmailrc установите опцию nokeep в конце записи poll.

3
17.05.2017, 02:57
2 ответа

По крайней мере, в GNU bc вы можете установить переменную среды BC_LINE_LENGTH в нулевое значение, например.

BC_LINE_LENGTH=0 bc -l <<<"scale=100;4*a(1)"

Из man bc:

BC_LINE_LENGTH
       This should be an integer specifying the number of characters in
       an  output  line  for  numbers.  This includes the backslash and
       newline characters for long numbers.  As an extension, the value
       of  zero  disables  the  multi-line feature.  Any other value of
       this variable that is less than 3 sets the line length to 70.
7
27.01.2020, 21:15

С реализацией GNU bc, начиная с версии 1.07, вы можете использоватьBC_LINE_LENGTH=0(DC_LINE_LENGTH=0для GNU dc), чтобы полностью отключить перенос строк, как уже упоминалось. В более старых версиях GNU bcвы можете использоватьBC_LINE_LENGTH=9999(или любое значение больше максимального размера числа, которое вы ожидаете увидеть ).

BC_LINE_LENGTH=9999 bc -l <<< 'scale=100;4*a(1)'

Для других реализаций вы могли бы вместо этого передать:

perl -pe 's/\\\n\z//'

или

sed -e :1 -e '/\\$/{N;s/\\\n//;b1' -e '}'

или

awk '{if (sub(/\\$/, "")) printf "%s", $0; else print}'

или (версия для гольфа):

awk '{ORS=sub(/\\$/,"")?"":RS};1'

Имейте в виду, однако, что в некоторых системах текстовые утилиты не поддерживают строки, длина которых превышает некоторый максимум (см. getconf LINE_MAX, который может составлять всего 1024 байта ).

2
27.01.2020, 21:15

Теги

Похожие вопросы