免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: xyzlsh
打印 上一主题 下一主题

问一个awk数组问题 [复制链接]

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
11 [报告]
发表于 2009-03-09 11:22 |只看该作者

回复 #8 xyzlsh 的帖子

try:

  1. awk '{a[$1]=a[$1]" "$2}END{for(i in a){l=split(a[i],b," ");for(j=1;j<l;j++) for(k=j+1;k<=l;k++) print i,b[j]"-"b[k]}}' urfile
复制代码

论坛徽章:
0
12 [报告]
发表于 2009-03-09 11:46 |只看该作者
原帖由 ly5066113 于 2009-3-9 11:22 发表
try:

awk '{a[$1]=a[$1]" "$2}END{for(i in a){l=split(a,b," ");for(j=1;j



论坛徽章:
0
13 [报告]
发表于 2009-03-09 12:11 |只看该作者

回复 #11 ly5066113 的帖子

pfpf,真没想到[$1]=a[$1]" "$2

论坛徽章:
0
14 [报告]
发表于 2009-03-09 13:08 |只看该作者
想不出别的办法了
  1. [root@Mylinux tmp]# cat file
  2. A G1
  3. A G2
  4. A G3
  5. A G4
  6. B G1
  7. B G2
  8. D G2
  9. D G3
  10. E G1
  11. E G3
  12. E G4
  13. [root@Mylinux tmp]# awk -v v="A" '$1==v{a[$2]++}END{printf v;for(i in a) if(i!=j)for (j in a) if(i!=j){c[i"-"j]++;if (!c[j"-"i]) d[i"-"j]++}for (k in d) printf " "k;print ""}' file
  14. A G3-G4 G1-G2 G1-G3 G1-G4 G2-G3 G2-G4
  15. [root@Mylinux tmp]# awk -v v="B" '$1==v{a[$2]++}END{printf v;for(i in a) if(i!=j)for (j in a) if(i!=j){c[i"-"j]++;if (!c[j"-"i]) d[i"-"j]++}for (k in d) printf " "k;print ""}' file
  16. B G1-G2
复制代码

[ 本帖最后由 ywlscpl 于 2009-3-9 13:36 编辑 ]

论坛徽章:
0
15 [报告]
发表于 2009-03-09 13:14 |只看该作者
  1. [root@Mylinux tmp]# cat mysh
  2. #!/bin/ksh
  3. awk '{a[$1]=$1}END{for (i in a) print a[i]}' file>tmpfile
  4. while read n
  5. do
  6.   awk -v v="$n" '$1==v{a[$2]++}END{printf v;for(i in a) if(i!=j)for (j in a) if(i!=j){c[i"-"j]++;if (!c[j"-"i]) d[i"-"j]++}for (k in d) printf " "k;print ""}' file
  7. done<tmpfile
  8. [root@Mylinux tmp]# ./mysh
  9. A G3-G4 G1-G2 G1-G3 G1-G4 G2-G3 G2-G4
  10. B G1-G2
  11. D G2-G3
  12. E G3-G4 G1-G3 G1-G4
复制代码

[ 本帖最后由 ywlscpl 于 2009-3-9 13:37 编辑 ]

论坛徽章:
0
16 [报告]
发表于 2009-03-09 15:04 |只看该作者
[wuyc@S102226 shell]$ cat test
A G1
A G2
A G3
B G1
B G2
D G2
D G3
E G1
E G3
E G4[wuyc@S102226 shell]$ ./k.sh
A
G1 - G2
G1 - G3
G2 - G3
B
G1 - G2
D
G2 - G3
E
G1 - G3
G1 - G4
G3 - G4
[wuyc@S102226 shell]$ cat k.sh
#! /bin/bash
awk '{if(a[$1]==0)a[$1]=$2;else a[$1]=a[$1]"-"$2}END{
for(i in a)
{
print i;
for(j=1;j<=length(a);j+=3)
        for(k=j+3;k<=length(a);k+=3)
                {print substr(a,j,2),"-",substr(a,k,2)}
}
#
}' test
[wuyc@S102226 shell]$

论坛徽章:
0
17 [报告]
发表于 2009-03-09 16:17 |只看该作者
我也贴一下吧,思路和tim基本一致,排序方面符合楼主
awk '{a[$1]=a[$1]" "$2}
END{
         for (i in a)
         {
               printf i" "
               b=split(a[i],d," ")
               for(j=1;j<b;j++)
               {
                    printf d[j]"-"d[j+1]" "
               }
               for(k=b;k>2;k--)
               {
                    for(m=1;m<k-1;m++)
                    {
                         printf d[k]"-"d[m]" "
                    }
               }
               print ""
         }
      }' file

result:
E G1-G2 G2-G3 G3-G4 G4-G1 G4-G2 G3-G1

论坛徽章:
0
18 [报告]
发表于 2009-03-09 16:27 |只看该作者
#! /bin/awk -f

BEGIN{FLAG="A"; BOOL=0}

{
        if($1==FLAG)
        {
                a[BOOL++]=$2;
        }
        else
        {
                printf("%s ", FLAG);
                for(i=0; i<BOOL; i++)
                {
                        for(j=i; j<BOOL-1; j++)
                        {
                                printf("%s-%s ", a, a[j+1]);
                        }
                }
                printf("\n");
                FLAG=$1;
                BOOL=0;
                a[BOOL++]=$2;
        }
}

file.log
A G1
A G2
A G3
A G4
A G5
B G1
B G2
B G9
D G2
D G3
E G1
E G3
E G4

result:
A G1-G2 G1-G3 G1-G4 G1-G5 G2-G3 G2-G4 G2-G5 G3-G4 G3-G5 G4-G5
B G1-G2 G1-G9 G2-G9
D G2-G3
E G1-G3 G1-G4 G3-G4

[ 本帖最后由 seepsun 于 2009-3-9 16:34 编辑 ]

论坛徽章:
0
19 [报告]
发表于 2009-03-09 16:31 |只看该作者

回复 #17 cooljean2008 的帖子

不错不错

论坛徽章:
0
20 [报告]
发表于 2009-03-09 16:34 |只看该作者
虚心学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP