Chinaunix

标题: 请教下如何实现下面的处理 [打印本页]

作者: awang0808    时间: 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

就是每四行里取四个参数,没有的就空出来。
多谢多谢!
作者: xiaopan3322    时间: 2011-07-29 15:28
B1,C1在哪里?
作者: awang0808    时间: 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
作者: liion631818    时间: 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. }'
复制代码

作者: awang0808    时间: 2011-07-29 16:26
运行了一下,结果如下:

A3         B3         C3        D3        
A2         B2         C2        
A1         B1         C1        D1

和我想要的倒过来了,但是没关系,非常感谢!
作者: awang0808    时间: 2011-07-29 16:29
额,怎么变了,这次的是顺着的了,多谢多谢!
作者: liion631818    时间: 2011-07-29 16:36
回复 6# awang0808


    awk的数组是没有顺序的。没办法保证。
作者: rqzrqh    时间: 2011-07-29 16:54
明显你的意思不是每四行里取四个参数
作者: ywlscpl    时间: 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
复制代码

作者: yinyuemi    时间: 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    ,       ,
复制代码

作者: xiaopan3322    时间: 2011-07-30 09:44
弓虽




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2