免费注册 查看新帖 |

Chinaunix

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

[文本处理] 我也来出道题 [复制链接]

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-10-12 08:58 |只看该作者 |倒序浏览
品牌 产品编号 价格
A    001       10
A    002       20
A    003       30
B    004       40
B    005       50
C    006       60
C    007       70

要得到的结果是:
A产品编号 A价格 B产品编号 B价格 C产品编号 C价格
001        10      004         40     006         60
002        20      005         50     007         70
003        30

论坛徽章:
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
2 [报告]
发表于 2012-10-12 10:00 |只看该作者
本帖最后由 rdcwayx 于 2012-10-12 12:03 编辑

回复 1# yestreenstars

欢迎出题。
awk '{a[$1]++;max=a[$1]>max?a[$1]:max
        b[a[$1] FS $1]=$2 FS $3}
    END{ for (j=1;j<=max;j++)
               { for (i in a) printf b[j FS i] OFS
                  printf RS
               }
          }' OFS="\t" infile

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
3 [报告]
发表于 2012-10-12 11:10 |只看该作者
看上去还是行列转换的问题

论坛徽章:
71
15-16赛季CBA联赛之同曦
日期:2018-08-23 15:41:42辰龙
日期:2014-08-15 09:07:43狮子座
日期:2014-06-03 13:55:33亥猪
日期:2014-06-02 11:17:08巨蟹座
日期:2014-05-06 10:02:03午马
日期:2014-05-04 08:18:27亥猪
日期:2014-04-29 11:11:32技术图书徽章
日期:2014-04-24 15:51:26技术图书徽章
日期:2014-04-17 11:01:53辰龙
日期:2014-04-15 12:45:46亥猪
日期:2014-04-11 09:06:23射手座
日期:2014-04-01 15:28:10
4 [报告]
发表于 2012-10-12 11:30 |只看该作者
echo " A产品编号 A价格 B产品编号 B价格 C产品编号 C价格
001        10      004         40     006         60
002        20      005         50     007         70
003        30"

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
5 [报告]
发表于 2012-10-12 12:14 |只看该作者
回复 4# zhaopingzi


    {:3_184:}

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
6 [报告]
发表于 2012-10-12 12:31 |只看该作者
回复 1# yestreenstars
  1. awk -vt="\t" -vfmt="%-10s" 'NR==1{a[1]=$2;a[2]=$3;next}{if(!b[$1]++)c=c?c"-"$1:$1;nr=nr>=b[$1]?nr:b[$1];d[b[$1]" "(2*length(b)-1)]=sprintf(fmt,$2);d[b[$1]" "2*length(b)]=sprintf(fmt,$3)}END{for(i=1;i<=split(c,e,"-");i++)printf (fmt fmt,e[i] a[1],e[i] a[2]);print "";for(i=1;i<=nr;i++){for(j=1;j<=length(b)*2;j++){printf (length(d[i" "j])?d[i" "j]:" ")};print ""}}'
复制代码

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
7 [报告]
发表于 2012-10-12 12:32 |只看该作者
吃个午饭,消化一下:
  1. [seesea@UC ~]$ awk -f xx.awk a.txt
  2. A产品编号       A价格   B产品编号       B价格   C产品编号       C价格
  3. 001     10      004     40      006     60
  4. 002     20      005     50      007     70
  5. 003     30
  6. [seesea@UC ~]$ cat xx.awk
  7. BEGIN {
  8.     OFS = "\t"
  9. }

  10. NR == 1 {
  11.     title1 = $2
  12.     title2 = $3
  13. }

  14. NR != 1 {
  15.     if (! ar_count[$1])
  16.         ar_count[$1] = 0

  17.     ar[$1, ar_count[$1], title1] = $2
  18.     ar[$1, ar_count[$1], title2] = $3
  19.     ar_count[$1]++
  20. }

  21. END {
  22.     asorti(ar_count, ar_type)
  23.     len = asort(ar_count)

  24.     for (i in ar_type)
  25.     {
  26.         printf ar_type[i] title1 OFS ar_type[i] title2 OFS
  27.     }
  28.     printf ORS

  29.     for (j = 0; j < ar_count[len]; ++j)
  30.     {
  31.         for (i in ar_type)
  32.         {
  33.             printf ar[ar_type[i], j, title1] OFS ar[ar_type[i], j, title2] OFS
  34.         }

  35.         printf ORS
  36.     }

  37. }
复制代码

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
8 [报告]
发表于 2012-10-12 12:33 |只看该作者
不过觉得转换后这个格式没什么实用的意义。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP