免费注册 查看新帖 |

Chinaunix

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

[文本处理] awk新手请问一段程序和报错的原因 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-24 13:41 |只看该作者 |倒序浏览
元数据格式是

姓名 班级 科目:成绩 科目:成绩 科目:成绩 科目:成绩 总分:绩点 这样

我想提取出所有成绩高于5 和所有绩点的数据 绩点肯定小于1


结果报错是
我试了一个上午也改不成功。。只好来求助,各位大神帮帮忙。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
2 [报告]
发表于 2013-01-24 13:57 |只看该作者
回复 1# kyotouni


    { 前不换行试试。

论坛徽章:
0
3 [报告]
发表于 2013-01-24 14:00 |只看该作者
回复 2# blackold


    谢谢大大回帖,改了一下报错更多。。。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
4 [报告]
发表于 2013-01-24 14:03 |只看该作者
回复 3# kyotouni


    else 前不换行,另外,最后贴文本,而不是图片。

论坛徽章:
0
5 [报告]
发表于 2013-01-24 14:06 |只看该作者
回复 4# blackold
  1. BEGIN{
  2.     FS="[: ]";
  3. }
  4. {
  5.     print $1" "$2;
  6.     for(i=3;i<=NF;i++){
  7.         if($i+1>=5+1){
  8.             print $(i-1)" "$i;
  9.         }else if($i+1<=1){
  10.             print $(i-1)" "$i;
  11.         }
  12.     }
  13. }
  14. END{
  15. }
复制代码
继续和上面一样报错

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


    if(){}
    else{
          if(){}
    } # 不能else if() {}

论坛徽章:
0
7 [报告]
发表于 2013-01-24 14:09 |只看该作者
回复 6# yinyuemi
  1. BEGIN{
  2.     FS="[: ]";
  3. }
  4. {
  5.     print $1" "$2;
  6.     for(i=3;i<=NF;i++){
  7.         if($i+1>=5+1){print $(i-1)" "$i;}
  8.         else{
  9.             if($i+1<=1){print $(i-1)" "$i;}
  10.         }
  11.     }
  12. }
  13. END{
  14. }
复制代码
执行不过

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
8 [报告]
发表于 2013-01-24 14:12 |只看该作者
回复 5# kyotouni


    是不是文件格式的问题?比如你的文件是 dos 格式。

论坛徽章:
0
9 [报告]
发表于 2013-01-24 14:15 |只看该作者
回复 8# blackold


    谢谢回复
应该不是
因为如果我抛去else部分 只是
  1. BEGIN{
  2.     FS="[: ]";
  3. }
  4. {
  5.     print $1" "$2;
  6.     for(i=3;i<=NF;i++){
  7.         if($i+1>=5+1){print $(i-1)" "$i;}
  8.     }
  9. }
  10. END{
  11. }
复制代码
执行的很好,这个是我原来写的一个只输出成绩的,一直用着这段代码。这次想把在0-1之间的绩点也输出就遇到麻烦啦。。
如果大大有更好的写法也望赐教一二。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
10 [报告]
发表于 2013-01-24 14:16 |只看该作者
回复 9# kyotouni
  1. $ cat 130124.awk
  2. BEGIN{
  3.     FS="[: ]";
  4. }
  5. {
  6.     print $1" "$2;
  7.     for(i=3;i<=NF;i++){
  8.         if($i+1>=5+1){
  9.             print $(i-1)" "$i;
  10.         }else if($i+1<=1){
  11.             print $(i-1)" "$i;
  12.         }
  13.     }
  14. }
  15. END{
  16. }
复制代码
  1. $ awk -f 130124.awk urfile
  2. 1 3
  3. 3 5
  4. 5 6
  5. 6 8
  6. 2
  7. 3
  8. 4
  9. 5
复制代码
  1. $ cat urfile
  2. 1:3:5:6:8
  3. 2
  4. 3
  5. 4
  6. 5
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP