免费注册 查看新帖 |

Chinaunix

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

再次跪求犀利脚本 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2010-04-23 09:55 |只看该作者
本帖最后由 woluty 于 2010-04-23 09:56 编辑

膜拜高人
自己写出来的列上来供大家检阅
辛苦了一小时多
把成果列出来方能舒服
#!/bin/bash
cat data|sort -g|sed -e 's/\// /'|awk '{
                        a[$1]=$1
                                if ($1 == 1)
                                         b[$2]=$1"/"$2
                                 else
                                         b[$2]=b[$1]"/"$2
                                print b[$2]
                                }
                        END{
                                print "#######################"
                                for(i in b){
                                        print b
                                                }
                           }'

论坛徽章:
0
22 [报告]
发表于 2010-04-23 10:04 |只看该作者
能否解释一下那个awk的命令呢?

论坛徽章:
0
23 [报告]
发表于 2010-04-23 10:08 |只看该作者
回复 7# ywlscpl


   看了你写的之后 我就立马顿悟了!  唉!! 我怎么没想到! TM 自己真笨!!!

论坛徽章:
0
24 [报告]
发表于 2010-04-23 10:21 |只看该作者
犀利啊。。。。膜拜中。。。。。

论坛徽章:
0
25 [报告]
发表于 2010-04-23 10:39 |只看该作者

  1. sort -n -t '/' 2 | awk -F'/' '!a[$1]{a[$1]=$1}{a[$2]=a[$1]"/"$2}END{for(i in a)print a[i]}'

  2. 我的思路是先排序
复制代码

论坛徽章:
0
26 [报告]
发表于 2010-04-23 10:51 |只看该作者
看懂了。。。
确实是相当的犀利啊

论坛徽章:
0
27 [报告]
发表于 2010-04-23 16:35 |只看该作者
ywlscpl 发表于 2010-04-22 16:33



    太牛了,MARK下

论坛徽章:
0
28 [报告]
发表于 2010-04-24 11:21 |只看该作者
回复 1# l_penny

来个纯的
  1. #! /bin/bash
  2. i=0;j=1;k=1;flag=0
  3. while read line
  4. do       
  5.         echo "in ${line}  ";echo
  6.         j=1
  7.         flag=0
  8.         while [[ ${a[j]} ]]
  9.         do
  10.         if [[ ${line%%/*} -eq ${a[j]##*/} ]]
  11.         then       
  12.                 echo "1   "       
  13.                 flag=1
  14.                 ((i++))
  15.                 a[i]="${a[j]}/${line#*/}"
  16.                  echo "new ${a[i]}"; echo
  17.                 ((j++))
  18.                 k=1
  19.                 while [[ ${a[k]} ]]
  20.                 do
  21.                         if [[ ${a[i]##*/} -eq ${a[k]%%/*} ]]
  22.                         then
  23.                                 echo "${a[k]}->"
  24.                                 a[k]="${a[i]}/${a[k]#*/}"
  25.                                 echo "${a[k]}" ;echo
  26.                         fi
  27.                 ((k++))
  28.                 done
  29.                 continue
  30.         else
  31.                 if [[ ${a[j]%%/*} -eq ${line##*/} ]]
  32.                 then
  33.                         echo "2    "
  34.                         echo "${a[j]}->"
  35.                         a[j]="${line}/${a[j]#*/}"
  36.                         echo "${a[j]}";echo
  37.                         ((j++))
  38.                         k=1
  39.                         while [[ ${a[k]} ]]
  40.                         do
  41.                                 if [[        ${a[k]##*/} -eq ${a[i]%%/*}        ]]
  42.                                 then
  43.                                         echo "${a[i]}->"
  44.                                         a[i]="${a[k]}/${a[i]#*/}"
  45.                                         echo "${a[i]}";echo
  46.                                 fi
  47.                         ((k++))
  48.                         done
  49.                         continue
  50.                 fi
  51.         fi
  52.         ((j++))
  53.         done
  54. if [[ flag -eq 0 ]]
  55. then
  56. ((i++))
  57. a[i]=${line}
  58. fi
  59. k=1
  60. while [[ ${a[k]} ]]
  61. do
  62.         echo "a[$k]=${a[k]}"
  63. ((k++))
  64. done
  65. echo
  66. done<data
  67. k=1
  68. while [[ ${a[k]} ]]
  69. do
  70.         echo ${a[k]}
  71.         echo
  72. ((k++))
  73. done

  74.        
复制代码

论坛徽章:
0
29 [报告]
发表于 2010-04-24 11:24 |只看该作者
本帖最后由 李寻欢92 于 2010-04-24 11:27 编辑

回复 1# l_penny


    上面的是带调试信息的,下面为纯代码
  1. #! /bin/bash
  2. i=0;j=1;k=1;flag=0
  3. while read line
  4. do       
  5.         #echo "in ${line}  ";echo
  6.         j=1
  7.         flag=0
  8.         while [[ ${a[j]} ]]
  9.         do
  10.         if [[ ${line%%/*} -eq ${a[j]##*/} ]]
  11.         then       
  12.                 #echo "1   "       
  13.                 flag=1
  14.                 ((i++))
  15.                 a[i]="${a[j]}/${line#*/}"
  16.                  #echo "new ${a[i]}"; echo
  17.                 ((j++))
  18.                 k=1
  19.                 while [[ ${a[k]} ]]
  20.                 do
  21.                         if [[ ${a[i]##*/} -eq ${a[k]%%/*} ]]
  22.                         then
  23.                                 #echo "${a[k]}->"
  24.                                 a[k]="${a[i]}/${a[k]#*/}"
  25.                                 #echo "${a[k]}" ;echo
  26.                         fi
  27.                 ((k++))
  28.                 done
  29.                 continue
  30.         else
  31.                 if [[ ${a[j]%%/*} -eq ${line##*/} ]]
  32.                 then
  33.                         #echo "2    "
  34.                         #echo "${a[j]}->"
  35.                         a[j]="${line}/${a[j]#*/}"
  36.                         #echo "${a[j]}";echo
  37.                         ((j++))
  38.                         k=1
  39.                         while [[ ${a[k]} ]]
  40.                         do
  41.                                 if [[        ${a[k]##*/} -eq ${a[i]%%/*}        ]]
  42.                                 then
  43.                                         #echo "${a[i]}->"
  44.                                         a[i]="${a[k]}/${a[i]#*/}"
  45.                                         #echo "${a[i]}";echo
  46.                                 fi
  47.                         ((k++))
  48.                         done
  49.                         continue
  50.                 fi
  51.         fi
  52.         ((j++))
  53.         done
  54. if [[ flag -eq 0 ]]
  55. then
  56. ((i++))
  57. a[i]=${line}
  58. fi
  59. k=1
  60. #while [[ ${a[k]} ]]
  61. #do
  62.         #echo "a[$k]=${a[k]}"
  63. #((k++))
  64. #done
  65. #echo
  66. done<data
  67. k=1
  68. while [[ ${a[k]} ]]
  69. do
  70.         echo ${a[k]}
  71. ((k++))
  72. done

  73.        
复制代码

论坛徽章:
0
30 [报告]
发表于 2010-04-25 16:03 |只看该作者
不是智商是什么。。。。
没智商的话就要靠勤奋HOHO~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP