免费注册 查看新帖 |

Chinaunix

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

请教下如何实现下面的处理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-07-29 15:11 |只看该作者 |倒序浏览
输入:

A1        , 1        , 1        , 1
2        , B2        , 2        , 2
3        , C2        , 3        , 3
D1        , 4        , 4        , 4
A2        , 5        , 5        , 5
6        , B2        , 6        , 6
7        , C2        , 7        , 7
A3        , 8        , 8        , 8
9         , B3        , 9        , 9
10        , C3        , 10        , 10
D3        , 11        , 11        , 11


输出:

A1        , B1        ,C1        ,D1
A2        , B2        ,C2        ,
A3        , B3        ,C3        ,D3

就是每四行里取四个参数,没有的就空出来。
多谢多谢!

论坛徽章:
0
2 [报告]
发表于 2011-07-29 15:28 |只看该作者
B1,C1在哪里?

论坛徽章:
0
3 [报告]
发表于 2011-07-29 15:28 |只看该作者
写错了,应该是


A1        , 1        , 1        , 1
2        , B1        , 2        , 2
3        , C1        , 3        , 3
D1        , 4        , 4        , 4
A2        , 5        , 5        , 5
6        , B2        , 6        , 6
7        , C2        , 7        , 7
A3        , 8        , 8        , 8
9         , B3        , 9        , 9
10        , C3        , 10        , 10
D3        , 11        , 11        , 11

论坛徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序设计版块每日发帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序设计版块每日发帖之星
日期:2016-06-12 06:20:002016科比退役纪念章
日期:2016-05-31 15:47:20CU十四周年纪念徽章
日期:2016-05-27 12:24:562015年亚洲杯之阿曼
日期:2015-05-03 21:01:352015年辞旧岁徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序设计版块每日发帖之星
日期:2016-08-11 06:20:00
4 [报告]
发表于 2011-07-29 16:11 |只看该作者
本帖最后由 liion631818 于 2011-07-29 16:19 编辑

  1. awk -F"," '{
  2.         for(i=1;i<=NF;i++) {
  3.                 gsub(" ", "", $i)
  4.                 if (pos = match($i, "[A-Z]")) {
  5.                         a[substr($i, pos + 1)] ? delims = "\t," :  delims = ""
  6.                         a[substr($i, pos + 1)] = a[substr($i, pos + 1)] delims $i
  7.                 }
  8.         }
  9. }
  10. END{
  11.         for (i in a) print a[i]
  12. }'
复制代码

论坛徽章:
0
5 [报告]
发表于 2011-07-29 16:26 |只看该作者
运行了一下,结果如下:

A3         B3         C3        D3        
A2         B2         C2        
A1         B1         C1        D1

和我想要的倒过来了,但是没关系,非常感谢!

论坛徽章:
0
6 [报告]
发表于 2011-07-29 16:29 |只看该作者
额,怎么变了,这次的是顺着的了,多谢多谢!

论坛徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序设计版块每日发帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序设计版块每日发帖之星
日期:2016-06-12 06:20:002016科比退役纪念章
日期:2016-05-31 15:47:20CU十四周年纪念徽章
日期:2016-05-27 12:24:562015年亚洲杯之阿曼
日期:2015-05-03 21:01:352015年辞旧岁徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序设计版块每日发帖之星
日期:2016-08-11 06:20:00
7 [报告]
发表于 2011-07-29 16:36 |只看该作者
回复 6# awang0808


    awk的数组是没有顺序的。没办法保证。

论坛徽章:
0
8 [报告]
发表于 2011-07-29 16:54 |只看该作者
明显你的意思不是每四行里取四个参数

论坛徽章:
0
9 [报告]
发表于 2011-07-29 16:54 |只看该作者
  1. ywlscpl@ubuntu:~$ cat file
  2. A1        , 1        , 1        , 1
  3. 2        , D5        , 2        , 2
  4. 3        , C1        , 3        , 3
  5. D1        , 4        , 4        , 4
  6. A2        , 5        , 5        , 5
  7. 6        , B2        , 6        , 6
  8. 7        , C4        , 7        , 7
  9. A3        , 8        , 8        , 8
  10. 9         , B3        , 9        , 9
  11. 10        , C3        , 10        , 10
  12. D3        , 11        , 11        , 11
  13. ywlscpl@ubuntu:~$ awk -v RS='[ ,\n]+' 'BEGIN{for (i=65;i<=90;i++) c[i]=sprintf("%c",i)}/^[A-Z]/{a[$0]=$0;sub(/^[A-Z]+/,"");m1=m1<$0?$0:m1}END{n=asort(a,b);sub(/[0-9]+$/,"",b[n]);for (i=65;i<=90;i++) if (c[i]==b[n]) m2=i;for (i=1;i<=m1;i++) {for (j=65;j<=m2;j++) {v=c[j]i;printf (j==65?"":"\t,")(v in a?v:"")}print ""}}' file
  14. A1      ,       ,C1     ,D1
  15. A2      ,B2     ,       ,
  16. A3      ,B3     ,C3     ,D3
  17.         ,       ,C4     ,
  18.         ,       ,       ,D5
复制代码

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
10 [报告]
发表于 2011-07-30 01:02 |只看该作者
本帖最后由 yinyuemi 于 2011-07-30 01:04 编辑

回复 1# awang0808
  1. echo 'A4        , 1        , 1        , 1
  2. 2        , B5        , 2        , 2
  3. 3        , C1        , 3        , 3
  4. D1        , 4        , 4        , 4
  5. A2        , 5        , 5        , 5
  6. 6        , B2        , 6        , 6
  7. 7        , C2        , 7        , 7
  8. A3        , 8        , 8        , 8
  9. 9         , B3        , 9        , 9
  10. 10        , C3        , 10        , 10
  11. D3        , 11        , 11        , 11' |\
  12. awk '{gsub(/ +, [0-9]+/,"")
  13.         gsub(/[0-9 ]+, /,"")
  14.         t1=substr($0,1,1);t2=substr($0,2,1)
  15.         a[t1]=t1
  16.         x=x>t2?x:t2;
  17.         c[$0]=1
  18.         }
  19.         END{for(i=1;i<=x;i++){
  20.                 for(j=1;j<asort(a);j++)
  21.                         printf c[a[j] i]?a[j] i"\t, ":"\t, "
  22.                 print c[a[j] i]?a[j] i:""}
  23.                 }'
  24.         ,       , C1    , D1
  25. A2      , B2    , C2    ,
  26. A3      , B3    , C3    , D3
  27. A4      ,       ,       ,
  28.         , B5    ,       ,
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP