【问题标题】:Issue with AWK array length?AWK 数组长度有问题吗?
【发布时间】:2016-12-07 21:09:26
【问题描述】:

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

如果我这样做:

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

接着是:

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)}'

基本上所有行的答案都是 24(相同的答案)。

但如果我这样做:

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

【问题讨论】:

  • 请分享minimal reproducible example,以便我们进行测试。
  • 已经给出了测试代码的输入文件
  • 我看不到您的 awk 命令如何返回 24/25/... 它没有任何打印或任何触发它的东西,所以它的输出应该是空白的。
  • 将脚本的目标明确附加到问题中。
  • 添加了“打印长度(数组)”,我在此处粘贴脚本时碰巧跳过了它......我试图找到每行值的第三个四分位数。所以除非我确定数组长度是正确的,否则继续前进是徒劳的。

标签: arrays awk gawk median asort


【解决方案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}'

【讨论】:

  • 其实你并没有使用med,所以你也可以放弃它。另外,最好说awk '...' file 而不是cat file | awk '...'
  • 其实如我所说,上面的awk只是另一个目的的测试脚本。 'med' 和许多其他变量正在被使用,我只是想把最简单的部分放在这里(这是导致问题的原因)。但是,是的,我同意,使用 cat .. 效率不高awk '..' 当 awk 可以接受参数时。无论如何,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-17
  • 1970-01-01
  • 2020-10-01
  • 1970-01-01
  • 2014-03-27
相关资源
最近更新 更多