Отбросить целое число и оставить число с плавающей запятой

Снаряды тут не при чем. Все, что они делают, это создают канал и запускают эти 3 команды, которые затем выполняются параллельно независимо от оболочки.

Здесь важно то, что обе хвостовые команды записывают файловый дескриптор в один и тот же конец записи одного и того же канала.

Если да:

printf foo1 >> file1; sleep 1
printf foo2 >> file2; sleep 1
printf 'bar1\n' >> file1; sleep 1
printf 'bar2\n' >> file2

Вот увидишь:

foo1foo2bar1
bar2

Потому что так они были написаны. Вы должны убедиться, что ваши команды выводят одну полную строку за раз,и что эти строки должны быть меньше, чем PIPE _BUF (4096 байт в Linux )для гарантии того, что запись ()будет атомарной (она также может записывать более одной полной строки за раз при условии все они заполнены, и их совокупный размер меньше, чем PIPE _BUF ).

С помощью GNU grepвы можете сделать это, передав свои команды вgrep --line-buffered '^'

(tail -f./file1 | grep --line-buffered '^' &
 tail -f./file2 | grep --line-buffered '^') | cat

Это гарантирует, что вы получите один write()системный вызов для каждой строки вывода обеих команд. (В случаях, когда команды не заканчивают свою последнюю строку вывода, grepдобавит новая строка)

0
07.11.2019, 17:37
2 ответа

Согласно документу bc:

expr / expr

The result of the expression is the quotient of the two expressions. The scale of the result is the value of the variable scale.

Так что используйте scale=0для целочисленного деления:

>bc <<<'scale=2; 8/3'                                                                 
2.66                                                                                             

>bc <<<'scale=0; 8/3'
2
0
28.01.2020, 02:39

Можно попробовать с постоянным током:

echo '21.15 1%60*p' | dc -f -

9,00

0
28.01.2020, 02:39

Теги

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