Linux 在awk的bashshell中使用bc作为守护进程
2) 使用命名管道: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;
# 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