Linux 按间隔分组数字:我有一个介于0.0-3.6之间的数字数组
我有一个介于0.0-3.6之间的数字数组,我想知道这些数字中有多少在区间内:0.0-0.2,0.2-0.4等等,有人能帮我吗?谢谢。。。 我在fortran中尝试了以下内容:Linux 按间隔分组数字:我有一个介于0.0-3.6之间的数字数组,linux,bash,fortran,Linux,Bash,Fortran,我有一个介于0.0-3.6之间的数字数组,我想知道这些数字中有多少在区间内:0.0-0.2,0.2-0.4等等,有人能帮我吗?谢谢。。。 我在fortran中尝试了以下内容: IMPLICIT NONE INTEGER :: acoun, bcoun, ccoun, dcoun, ecoun, fcoun, gcoun, hcoun, icoun INTEGER :: jcoun, kcoun, lcoun, mcoun, ncoun, ocoun, pcoun, qcoun
IMPLICIT NONE
INTEGER :: acoun, bcoun, ccoun, dcoun, ecoun, fcoun, gcoun, hcoun, icoun
INTEGER :: jcoun, kcoun, lcoun, mcoun, ncoun, ocoun, pcoun, qcoun, ia
INTEGER :: i1(4), i2(30), i3(30), i4(30), i5(30), i6(30), i7(30), i8(30), i9(30), i10(30), &
i11(30), i12(30), i13(30), i14(30), i15(30), i16(30), i17(30)
REAL :: a
OPEN(UNIT=10,FILE='DAN1',STATUS='OLD')
acoun=0.0
bcoun=0.0
ccoun=0.0
dcoun=0.0
ecoun=0.0
fcoun=0.0
gcoun=0.0
hcoun=0.0
icoun=0.0
jcoun=0.0
kcoun=0.0
lcoun=0.0
mcoun=0.0
ncoun=0.0
ocoun=0.0
pcoun=0.0
do i=1,119
READ(10,*)a
if (( a < 0.2d0 ).and.(a > 0.0d0) )then
i1(acoun)=i
acoun=acoun+1
elseif (( a < 0.4d0 ).and.(a > 0.2d0) )then
i2(bcoun)=i
bcoun=bcoun+1
elseif (( a < 0.6d0 ).and.(a > 0.4d0) )then
i3(ccoun)=i
ccoun=ccoun+1
elseif (( a < 0.8d0 ).and.(a > 0.6d0) )then
i4(dcoun)=i
dcoun=dcoun+1
elseif (( a < 1.0d0 ).and.(a > 0.8d0) )then
i5(ecoun)=i
ecoun=ecoun+1
elseif (( a < 1.2d0 ).and.(a > 1.0d0) )then
i6(fcoun)=i
fcoun=fcoun+1
elseif (( a < 1.4d0 ).and.(a > 1.2d0) )then
i7(gcoun)=i
gcoun=gcoun+1
elseif (( a < 1.6d0 ).and.(a > 1.4d0) )then
i8(hcoun)=i
hcoun=hcoun+1
elseif (( a < 1.8d0 ).and.(a > 1.6d0) )then
i9(icoun)=i
icoun=icoun+1 elseif (( a < 2.0d0 ).and.(a > 1.8d0) )then
i10(jcoun)=i
jcoun=jcoun+1
elseif (( a < 2.2d0 ).and.(a > 2.0d0) )then
i11(kcoun)=i
kcoun=kcoun+1
elseif (( a < 2.4d0 ).and.(a > 2.2d0) )then
i12(lcoun)=i
lcoun=lcoun+1
elseif (( a < 2.6d0 ).and.(a > 2.4d0) )then
i13(mcoun)=i
mcoun=mcoun+1
elseif (( a < 2.8d0 ).and.(a > 2.6d0) )then
i14(ncoun)=i
ncoun=ncoun+1
elseif (( a < 3.0d0 ).and.(a > 2.8d0) )then
i15(ocoun)=i
ocoun=ocoun+1
elseif (( a < 3.2d0 ).and.(a > 3.0d0) )then
i16(pcoun)=i
pcoun=pcoun+1
elseif (a > 3.2d0)then
i17(qcoun)=i
qcoun=qcoun+1
endif
enddo
WRITE(*,*) i1(acoun),acoun
WRITE(*,*) i2(bcoun),bcoun
WRITE(*,*) i3(ccoun),ccoun
WRITE(*,*) i4(dcoun),dcoun
WRITE(*,*) i5(ecoun),ecoun
WRITE(*,*) i6(fcoun),fcoun
WRITE(*,*) i7(gcoun),gcoun
WRITE(*,*) i8(hcoun),hcoun
WRITE(*,*) i9(icoun),icoun
WRITE(*,*) i10(jcoun),jcoun
WRITE(*,*) i11(kcoun),kcoun
WRITE(*,*) i12(lcoun),lcoun
WRITE(*,*) i13(mcoun),mcoun
WRITE(*,*) i14(ncoun),ncoun
WRITE(*,*) i15(ocoun),ocoun
WRITE(*,*) i16(pcoun),pcoun
WRITE(*,*) i17(qcoun),qcoun
close(10)
ENDPROGRAM sorting"
隐式无
整数::acoun、bcoun、ccoun、dcoun、ecoun、fcoun、gcoun、hcoun、icoun
整数::jcoun、kcoun、lcoun、mcoun、ncoun、ocoun、pcoun、qcoun、ia
整数:i1(4)、i2(30)、i3(30)、i4(30)、i5(30)、i6(30)、i7(30)、i8(30)、i9(30)、i10(30)&
i11(30)、i12(30)、i13(30)、i14(30)、i15(30)、i16(30)、i17(30)
真的吗
打开(单位=10,文件='DAN1',状态='OLD')
acoun=0.0
b盎司=0.0
ccoun=0.0
dcoun=0.0
ecoun=0.0
fcoun=0.0
gcoun=0.0
hcoun=0.0
icoun=0.0
jcoun=0.0
kcoun=0.0
lcoun=0.0
mcoun=0.0
ncoun=0.0
ocoun=0.0
pcoun=0.0
i=1119吗
读(10,*)a
如果((a<0.2d0)和(a>0.0d0)),则
i1(acoun)=i
acoun=acoun+1
elseif((a<0.4d0)和(a>0.2d0))然后
i2(b盎司)=i
b盎司=b盎司+1
elseif((a<0.6d0)和(a>0.4d0))然后
i3(ccoun)=i
ccoun=ccoun+1
elseif((a<0.8d0)和(a>0.6d0))然后
i4(dcoun)=i
dcoun=dcoun+1
elseif((a<1.0d0)和(a>0.8d0))然后
i5(ecoun)=i
ecoun=ecoun+1
elseif((a<1.2d0)和(a>1.0d0))然后
i6(fcoun)=i
fcoun=fcoun+1
elseif((a<1.4d0)和(a>1.2d0))然后
i7(gcoun)=i
gcoun=gcoun+1
elseif((a<1.6d0)和(a>1.4d0))然后
i8(hcoun)=i
hcoun=hcoun+1
elseif((a<1.8d0)和(a>1.6d0))然后
i9(icoun)=i
icoun=icoun+1 elseif((a<2.0d0)和(a>1.8d0))然后
i10(jcoun)=i
jcoun=jcoun+1
elseif((a<2.2d0)和(a>2.0d0))然后
i11(kcoun)=i
kcoun=kcoun+1
elseif((a<2.4d0)和(a>2.2d0))然后
i12(lcoun)=i
lcoun=lcoun+1
elseif((a<2.6d0)和(a>2.4d0))然后
i13(mcoun)=i
mcoun=mcoun+1
elseif((a<2.8d0)和(a>2.6d0))然后
i14(ncoun)=i
ncoun=ncoun+1
elseif((a<3.0d0)和(a>2.8d0))然后
i15(ocoun)=i
ocoun=ocoun+1
elseif((a<3.2d0)和(a>3.0d0))然后
i16(pcoun)=i
pcoun=pcoun+1
elseif(a>3.2d0)然后
i17(qcoun)=i
qcoun=qcoun+1
恩迪夫
结束循环
写入(*,*)i1(acoun),acoun
写入(*,*)i2(bcoun),bcoun
写入(*,*)i3(ccoun),ccoun
写入(*,*)i4(dcoun),dcoun
写入(*,*)i5(ecoun),ecoun
写入(*,*)i6(fcoun),fcoun
写入(*,*)i7(gcoun),gcoun
写入(*,*)i8(hcoun),hcoun
写入(*,*)i9(icoun),icoun
写入(*,*)i10(jcoun),jcoun
写入(*,*)i11(kcoun),kcoun
写入(*,*)i12(lcoun),lcoun
写入(*,*)i13(mcoun),mcoun
写入(*,*)i14(ncoun),ncoun
写入(*,*)i15(ocoun),ocoun
写入(*,*)i16(pcoun),pcoun
写入(*,*)i17(qcoun),qcoun
关闭(10)
结束程序排序“
此文件给出了一些值,但它们不正确。此程序在每个时间间隔内都会过度计数
我在bash中试过这个
我尝试在bash中使用if语句,如:
if [$var > 0.0 -a 0.2 < $var]then
echo "$var" >> file
wc -l file
如果[$var>0.0-0.2<$var],则
echo“$var”>>文件
wc-l文件
但它也不起作用
非常感谢您的帮助….Bash不支持浮点运算,但awk支持: 假设
文件
包含所有数字,在单独的行中,此脚本应该执行您想要的操作:
$ awk '{a[int($1/0.2)]++}END{for(i in a)print i*0.2 "-" (i+1)*0.2, a[i]}' file | sort -n
那么到底是哪一种,
bash
还是fortran
?您需要向我们展示您已经尝试过的内容。我写了一篇关于如何更有效地进行此操作的文章。您可能值得花时间阅读。