免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1565 | 回复: 4
打印 上一主题 下一主题

关于一次处理多列的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-04-30 18:18 |只看该作者 |倒序浏览
本帖最后由 happycentos123 于 2012-04-30 21:10 编辑

把下面文件中的带"NO"的位置填充上数字,所要填充的数值为上下行相邻最近有数值行的中间值, 首尾的值和最边上的值一致,如下所示:
       NO                       14
       14                        14
输     NO              输      13
入     12              出       12
文     NO             文        8
件     4                件       4
       NO                        5
       6                          6
       NO                       5.5
       5                          5
       NO                       6
       NO                       7
       8                         8
       NO                       8
       NO                       8
       NO                       8
下面的一个代码可以实现上面的运算。
  1. awk '
  2. {n++ }
  3. /^[A-Za-z ]/{next}
  4. #/N/{next}
  5. {
  6.   for(i=1;i<=n;i++)
  7.    if(p)
  8.    #if(p!="")
  9.      print p+($1-p)/n*i;
  10.   else
  11.      print $1;p=$1;n=0;
  12. }
  13. END{while(n--)print p}' file
复制代码
现在需要对多列包含"NO"的列进行这样的的处理,想不出来怎么样一步就实现出来,只会一列一列cut 出来 ,弄好了再paste到一起,还能有列漂亮简单的么 帮想想谢谢!
  1. 34 15   24 25   54 65   44 NO
  2. 13 NO   33 45   83 NO   13 18
  3. 21 NO   41 NO   21 13   21 NO
  4. 22 12   22 12   92 12   22 12
  5. 13 NO   53 23   93 NO   53 NO
  6. 21 4    91 64   21 4    21 5
  7. 33 NO   83 NO   93 NO   33 NO
  8. 43 6    23 6    83 9    63 8
  9. 13 NO   83 67   13 12   23 NO
  10. 23 5    33 5    23 5    93 5
  11. 34 NO   84 89   34 NO   24 NO
  12. 15 NO   75 NO   15 67   45 NO
  13. 25 NO   15 15   25 NO   35 NO
  14. 15 NO   95 NO   15 19   85 18
  15. 34 NO   84 12   34 NO   84 90
  16. 10 NO    40 NO   80 81   70 NO
复制代码
需要对2 4 6 8 列进行这样的处理

论坛徽章:
1
辰龙
日期:2014-05-22 11:38:58
2 [报告]
发表于 2012-05-01 09:59 |只看该作者
帮你顶 坐等高手

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
3 [报告]
发表于 2012-05-01 11:06 |只看该作者
  1. awk '{for (i=1;i<=NF;i++)
  2.          { a[NR FS i]=$i
  3.            n[i]++
  4.            if ($i!~/^[A-Za-z ]/)
  5.               { for (j=1;j<n[i];j++)
  6.                   if (b[i])
  7.                      a[NR-n[i]+j FS i]=b[i]+($i-b[i])/n[i]*j
  8.                   else
  9.                      a[NR-n[i]+j FS i]=$i
  10.                 b[i]=$i;n[i]=0
  11.               }
  12.           }
  13.       }
  14. END {  for (i=1;i<=NF;i++)
  15.           { if (n[i]>0)
  16.                  for (j=1;j<=n[i];j++)
  17.                      a[NR-n[i]+j FS i]=b[i]
  18.           }
  19.        for (j=1;j<=NR;j++)
  20.         { for (i=1;i<=NF;i++)
  21.              printf a[j FS i] "\t"
  22.           printf RS
  23.         }
  24.      }' infile
复制代码

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
4 [报告]
发表于 2012-05-01 11:09 |只看该作者
output from above awk command:
  1. 34      15      24      25      54      65      44      18
  2. 13      14      33      45      83      39      13      18
  3. 21      13      41      28.5    21      13      21      15
  4. 22      12      22      12      92      12      22      12
  5. 13      8       53      23      93      8       53      8.5
  6. 21      4       91      64      21      4       21      5
  7. 33      5       83      35      93      6.5     33      6.5
  8. 43      6       23      6       83      9       63      8
  9. 13      5.5     83      67      13      12      23      6.5
  10. 23      5       33      5       23      5       93      5
  11. 34      5       84      89      34      36      24      8.25
  12. 15      5       75      52      15      67      45      11.5
  13. 25      5       15      15      25      43      35      14.75
  14. 15      5       95      13.5    15      19      85      18
  15. 34      5       84      12      34      50      84      90
  16. 10      5       40      12      80      81      70      90
复制代码

论坛徽章:
0
5 [报告]
发表于 2012-05-02 11:09 |只看该作者
回复 5# rdcwayx


    不愧为版主,英明神武! 谢谢!努力学习数组应用!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP