免费注册 查看新帖 |

Chinaunix

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

[文本处理] 堆栈问题 [复制链接]

论坛徽章:
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-11-28 17:01 |只看该作者 |正序浏览
本帖最后由 yestreenstars 于 2012-11-28 18:43 编辑

处理前:
{0},1,2,{3,4},{{{0,1},1,2},5,6,{7,8},9,0,{1,1},{2,2,3},0,{1,{2},3}},0,{1,1},0,0,{2,2},{0}

要求:
取出括号里的各个元素。

处理后:
0
3,4
0,1
1,2
5,6,
7,8
9,0,
1,1
2,2,3
0,
1,
2
3
1,1
2,2
0

注:聪明的你应该发现有些结果后面会多出一个逗号,并非我打错了。

论坛徽章:
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
24 [报告]
发表于 2012-11-29 20:00 |只看该作者
@seesea2517佩服佩服~

论坛徽章:
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
23 [报告]
发表于 2012-11-29 17:38 |只看该作者
回复 22# seeLnd


    就这么简单啊……真是大跌眼镜哈哈,感谢感谢。

论坛徽章:
0
22 [报告]
发表于 2012-11-29 17:06 |只看该作者
回复 21# seesea2517
  1. echo -n "abc" | while read -n1 var; do echo $var; done
复制代码

论坛徽章:
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
21 [报告]
发表于 2012-11-29 16:51 |只看该作者
纯shell处理的,有一个问题,我没找到 IFS 如何设置可以使得 for 里的 i 可以一个字符一个字符地取,没办法就把每个字符用 sed 处理为空格分隔了。希望有知道处理方法的 @ 我一下~
  1. input="{0},1,2,{3,4},{{{0,1},1,2},5,6,{7,8},9,0,{1,1},{2,2,3},0,{1,{2},3}},0,{1,1},0,0,{2,2},{0}"
  2. flag=0
  3. str=""
  4. for i in $(echo $input | sed 's/./& /g')
  5. do
  6.     if [ $i = "{" ]
  7.     then
  8.         (( ++flag ))
  9.     elif [ $i = "}" ]
  10.     then
  11.         (( --flag ))
  12.     fi
  13.       
  14.     if [ $flag -lt 0 ]
  15.     then
  16.         echo "喂!括号不匹配。"
  17.         exit
  18.     fi
  19.    
  20.     test_str="}{"
  21.     if [ ${test_str/$i/} != $test_str -a "$str" != "" ]
  22.     then
  23.         echo $str
  24.         str=""
  25.     fi
  26.    
  27.     test_str=",}{"
  28.     if [ "$str" = "" -a ${test_str/$i/} != $test_str ]
  29.     then
  30.         continue
  31.     fi
  32.    
  33.     if [ $flag -eq 0 ]
  34.     then
  35.         continue
  36.     fi
  37.         
  38.     str="$str$i"
  39. done
复制代码

论坛徽章:
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
20 [报告]
发表于 2012-11-29 14:44 |只看该作者
回复 19# yestreenstars


    这个建议不错,嗯,看,15楼就是纯代码的。

论坛徽章:
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
19 [报告]
发表于 2012-11-29 11:52 |只看该作者
回复 18# seesea2517


    这个可以有 我建议下次发代码时把代码和结果分开来发,不然不好复制代码啊~

论坛徽章:
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
18 [报告]
发表于 2012-11-29 10:50 |只看该作者
要不要来个纯shell的?这个 awk 的可以直接转化,哈。

论坛徽章:
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
17 [报告]
发表于 2012-11-29 10:49 |只看该作者
其实把上面的正则的直接移植到 awk 就可以,我这特意用另一种思路。

论坛徽章:
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
16 [报告]
发表于 2012-11-29 10:48 |只看该作者
本帖最后由 seesea2517 于 2012-11-29 10:48 编辑
  1. [seesea@UC ~]$ echo "{0},1,2,{3,4},{{{0,1},1,2},5,6,{7,8},9,0,{1,1},{2,2,3},0,{1,{2},3}},0,{1,1},0,0,{2,2},{0}" | awk '
  2. > BEGIN{
  3. >     FS=""
  4. > }
  5. >
  6. > {
  7. >     for (i = 1; i <= NF; ++i)
  8. >     {
  9. >         if ($i == "{")
  10. >         {
  11. >             ++flag;
  12. >         }
  13. >         else if ($i == "}")
  14. >         {
  15. >             --flag;
  16. >         }
  17. >            
  18. >         if (flag < 0)
  19. >         {
  20. >             print "喂!括号不匹配。"
  21. >             exit
  22. >         }
  23. >         
  24. >         if ($i ~ "[}{]" && str != "")
  25. >         {
  26. >             print str
  27. >             str = ""
  28. >         }
  29. >            
  30. >         if (str == "" && $i ~ "[,}{]")
  31. >             continue
  32. >         
  33. >         if (flag == 0)
  34. >         {
  35. >             continue
  36. >         }
  37. >            
  38. >         str = str""$i
  39. >     }   
  40. > }'
  41. 0
  42. 3,4
  43. 0,1
  44. 1,2
  45. 5,6,
  46. 7,8
  47. 9,0,
  48. 1,1
  49. 2,2,3
  50. 0,
  51. 1,
  52. 2
  53. 3
  54. 1,1
  55. 2,2
  56. 0
复制代码
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP