AWK数组长度问题?

时间:2016-08-02 13:22:21

标签: arrays awk gawk median asort

我有一个制表符分隔矩阵(比如文件名)。

如果我这样做:

head -2 filename | tail -1 | awk -F "\t" '{i=0;med=0;for(i=2;i<=NF;i++) array[i]=$i;asort(array);print length(array)}'

接下来是:

cat filename | awk -F "\t" '{i=0;med=0;for(i=2;i<=NF;i++) array[i]=$i;asort(array);print length(array)}'

我基本上得到了所有行的答案(相同答案)。

但如果我这样做:

24
25
25
25
25 ...

我明白了:

Case1   17.49   0.643   0.366   11.892  0.85    5.125   0.589   0.192   0.222   0.231   27.434  0.228   0   0.111   0.568   0.736   0.125   0.038   0.218   0.253   0.055   0.019   0   0.078  
Case2   0.944   2.412   4.296   0.329   0.399   1.625   0.196   0.038   0.381   0.208   0.045   1.253   0.382   0.111   0.324   0.268   0.458   0.352   0   1.423   0.887   0.444   5.882   0.543  
Case3   21.266  14.952  24.406  10.977  8.511   21.75   6.68    0.613   12.433  1.48    1.441   21.648  6.972   42.931  8.029   4.883   11.912  6.248   4.949   26.882  9.756   5.366   38.655  12.723  
Case4   0.888   0   0.594   0.549   0.105   0.125   0   0   0.571   0.116   0.019   1.177   0.573   0.111   0.081   0.401   0   0.05    0.073   0   0   0   0   0.543

为什么会这样?

以下是输入文件:

sc.nextInt()

1 个答案:

答案 0 :(得分:1)

好吧,我找到了自己问题的答案:

我想知道我是如何错过它的,但是在每次启动结束时使数组无效对于重复使用相同的数组名称始终是至关重要的(无论使用哪种语言/脚本)。

正确的awk是:

cat filename | awk -F "\t" '{i=0;med=0;for(i=2;i<=NF;i++) array[i]=$i;asort(array);print length(array);delete array}'