免费注册 查看新帖 |

Chinaunix

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

请教要用/bin/sh解决的一道题! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-03-19 00:08 |只看该作者 |倒序浏览
有一表很大,形式如下(第二列总类别是有限的):
A         HD    8
A         HF  10
B         HF  19
B         HW  100
B         HV  76
C         HD  14
C         HL  25
C         HW  30
......
等等,如何能最后形成如下表的形式:
            HD  HF   HL    HV   HW   HM ...  
A          8    10
B                19           76   100
C        14           25           30
........

论坛徽章:
0
2 [报告]
发表于 2003-03-19 07:47 |只看该作者

请教要用/bin/sh解决的一道题!

...


这个比较麻烦,好象牵涉到行与列对调了,没有象C下面那样用数组下标就能解决。开始,我是用了一些临时文件来存放,但是效率太低,因为你说是个很大的表。

现在改成这样,不用临时文件,但是效率仍然不是很高,希望大侠们有更好的方法。

  1. #!/bin/sh

  2. FILE=table.txt

  3. str=`awk '{ B[$2] } END { for ( i in B ) print i; }' $FILE | sort | tr "\n" "\t"`
  4. str2=`echo $str | awk '{ for ( i=1; i<=NF; i++) printf "$"$ i "#"; printf "\n" }'`

  5. echo "  $str"

  6. while read line; do
  7.    set -- $line
  8.    key=$1
  9.    eval `grep ^$key $FILE | awk '{print $2"="$3}'`
  10.    eval printf \"$line\\\n\" | tr '#' '\t'
  11.    eval `grep ^$key $FILE | awk '{print $2"=" ""}'`
  12. done <<EOF
  13. `nawk -v string="$str2" '{ A[$1] } END { for ( i in A ) print i" "string }' $FILE`
  14. EOF
复制代码


Solaris 下通过.

论坛徽章:
0
3 [报告]
发表于 2003-03-20 17:24 |只看该作者

请教要用/bin/sh解决的一道题!

红袖添香,就是高!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2003-03-20 18:59 |只看该作者

请教要用/bin/sh解决的一道题!

严重同意楼上观点,红袖添香同志对shell的应用确实很深啊!:)

论坛徽章:
0
5 [报告]
发表于 2003-03-20 19:07 |只看该作者

请教要用/bin/sh解决的一道题!

[quote]原帖由 "蓝色键盘"]严重同意楼上观点,红袖添香同志对shell的应用确实很深啊!:)[/quote 发表:



过奖了,键盘兄才是高手,在《高级应用》中看到过你的几篇帖子,知道你才是大内级的,偶们都只是玩玩的……  

论坛徽章:
0
6 [报告]
发表于 2003-03-21 14:35 |只看该作者

请教要用/bin/sh解决的一道题!

谦虚得这样有水平!!
真是高得一塌糊涂了!!我从心理佩服你!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP