Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在awk的bashshell中使用bc作为守护进程_Linux_Bash_Awk_Fifo_Bc - Fatal编程技术网

Linux 在awk的bashshell中使用bc作为守护进程

Linux 在awk的bashshell中使用bc作为守护进程,linux,bash,awk,fifo,bc,Linux,Bash,Awk,Fifo,Bc,2) 使用命名管道: # mkfifo inp out # bc -ql <inp >out & [1] 6766 # # exec 3>inp 4<out # echo "scale=3; 4/5;" >&3 # read a <&4; echo $a .800 # # awk ' BEGIN { printf("4/5\n") >"/dev/fd/3"; exit 1;} ' # read a <&4;

2) 使用命名管道:

# mkfifo inp out
# bc -ql  <inp  >out  &
[1] 6766
#
# exec 3>inp  4<out
# echo "scale=3; 4/5;" >&3
# read a <&4; echo $a
.800
#
# awk ' BEGIN { printf("4/5\n") >"/dev/fd/3"; exit 1;} '
# read a <&4; echo $a
.800
#
# awk ' BEGIN { printf("4/5\n") >"/dev/fd/3"; exit 1;} '
# awk ' BEGIN { getline a <"/dev/fd/4"; printf("%s\n", a); } '
^C
# time for((i=6000;i;i--)); do a=`echo "$i/1"|bc -ql`; done
real    0m13.936s
#mkfifo输入输出
#bc-ql输出&
#执行3>在4和3中;读一篇试试:

mkfifo输入输出
bc-l输出&
awk'开始{printf(“4/5\n”);退出0;}>inp
读出一个<;回音$a
awk'开始{printf(“4/5\n”);退出0;}>inp
awk'开始{getline a;printf(“%s\n”,a);退出0}'
听起来你在寻找gawk的协同处理能力,请参阅。但是,考虑到awks对数学函数的支持,我想知道为什么要使用
bc

来处理gawk。失败与痛苦。你用的是哪种awk?你应该把它包括在你的问题中!我有同样的
mawk
和你一样失败。但是使用
gawk
它工作得很好。bc确实具有多重精度。
# mkfifo in out
# bc -ql <in >out &
# exec 3>in 4<out
#
# time for((i=500000;i;i--)); do echo "$i/1" >&3; read a <&4; done
real    0m14.391s
# time awk ' BEGIN {
#               for(i=30000;i;i--){
#                   printf("%d/1\n",i) >"/dev/fd/3";
#                   system("read a </dev/fd/4; echo $a >tmp_1");
#                   getline a <"tmp_1"; close("tmp_1");}
#                  } '
real    0m14.178s
# awk ' BEGIN {
#         for(i=4;i;i--){
#         printf("%d/1\n",i) >"/dev/fd/3"; system("sleep .1");
#        "read a </dev/fd/4; echo $a" | getline a ;print a;}
#      } '
4.000
4.000
4.000
4.000
# for((;;)); do read a </dev/fd/4; echo $a; done
3.000
2.000
1.000
mkfifo inp out
bc -l  <inp  >out  &
awk ' BEGIN { printf("4/5\n"); exit 0;} ' > inp
read a < out; echo $a

awk ' BEGIN { printf("4/5\n"); exit 0;} ' > inp

awk ' BEGIN { getline a; printf("%s\n", a); exit 0 } ' < out

rm inp 
rm out