免费注册 查看新帖 |

Chinaunix

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

awk补全数据(求助各位大侠) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-06-19 13:09 |只看该作者 |倒序浏览

10:00   12035   10670   11615
09:55   11285   15505   9955
09:50   13290   33025   11080
09:45   20515   20815   
09:40   6800    11975   26590
09:35   11845   20250   8665
09:30   11995   15840   5675
09:25               8150
09:20   14100   19125   23775
09:15   11400   26065   10670

如上数据 某些可能由于服务器故障 数据没有上报,现在需要把这些数据补全,补全的规则是上一时刻的数据,比如9:45最后一列没有,就补全为上一时刻9:40的数据26590,请问各位大侠有好的方法么?

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
2 [报告]
发表于 2012-06-19 13:20 |只看该作者
回复 1# liangfm117


    如果上一时刻的也缺失了呢?

论坛徽章:
0
3 [报告]
发表于 2012-06-19 14:33 |只看该作者
回复 2# yinyuemi


    那就再到上上时刻 没有关系

论坛徽章:
0
4 [报告]
发表于 2012-06-19 14:38 |只看该作者
个人认为此题用C比较好。下面给出了一个awk的解法,很像C。另外要求数据文件的格式是:5个数字 3个空格 5个数字 3个空格 5个数字 三个空格 5个数字。
]#cat awk.script
{
    if(substr($0,1,5)~"[0-9]")
   {
      f1=substr($0,1,5)
   }  
   if(substr($0,9,5)~"[0-9]")
   {
      f2=substr($0,9,5)
   }
   if(substr($0,17,5)~"[0-9]")
   {
      f3=substr($0,17,5)
   }
   if(substr($0,25,5)~"[0-9]")
   {
      f4=substr($0,25,5)
   }
   printf("%5s   %5s   %5s   %5s\n",f1,f2,f3,f4)
}
]#cat complement.sh
#!/bin/sh
tac dataFile>tmpFile
awk -f awk.script tmpFile|tac>dataFile
rm -f tmpFile

论坛徽章:
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
5 [报告]
发表于 2012-06-19 14:45 |只看该作者
列与列之间靠什么分割,多个空格还是TAB?

论坛徽章:
0
6 [报告]
发表于 2012-06-19 14:50 |只看该作者
回复 5# rdcwayx


    tab。。。。

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
7 [报告]
发表于 2012-06-19 15:01 |只看该作者
回复 3# liangfm117


    既然没关系,那就随便整个数值不就行?

论坛徽章:
0
8 [报告]
发表于 2012-06-19 15:05 |只看该作者
yinyuemi 发表于 2012-06-19 15:01
回复 3# liangfm117
不能太随便 最好能保持平稳 所以选择上时刻的 因为生成完这三列数据要画图的  如果随便的数值了画图也就缺失意义了  

论坛徽章:
0
9 [报告]
发表于 2012-06-19 15:06 |只看该作者
不能太随便 最好能保持平稳 所以选择上时刻的 因为生成完这三列数据要画图的  如果随便的数值了画图也就缺失意义了回复 7# yinyuemi


   

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
10 [报告]
发表于 2012-06-19 15:18 |只看该作者
回复 8# liangfm117
  1. echo -e "10:00\t12035\t10670\t11615
  2. 09:55\t11285\t15505\t9955
  3. 09:50\t13290\t33025\t11080
  4. 09:45\t20515\t20815\t
  5. 09:40\t6800\t11975\t26590
  6. 09:35\t11845\t20250\t8665
  7. 09:30\t11995\t15840\t5675
  8. 09:25\t\t\t8150
  9. 09:20\t14100\t19125\t23775
  10. 09:15\t11400\t26065\t10670" |tac |awk 'NF==4{split($0,a,"\t");print;next}{for(i=1;i<=split($0,b,"\t");i++)c=c (i==1?"":"\t") (b[i]?b[i]:a[i]);print c;c=""}' |tac
  11. 10:00   12035   10670   11615
  12. 09:55   11285   15505   9955
  13. 09:50   13290   33025   11080
  14. 09:45   20515   20815   26590
  15. 09:40   6800    11975   26590
  16. 09:35   11845   20250   8665
  17. 09:30   11995   15840   5675
  18. 09:25   14100   19125   8150
  19. 09:20   14100   19125   23775
  20. 09:15   11400   26065   10670
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP