忘记密码   免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
123下一页
最近访问板块 发新帖
查看: 2154 | 回复: 20

[文本处理] 重复字符 [复制链接]

论坛徽章:
6
程序设计版块每日发帖之星
日期:2016-05-11 06:20:00操作系统版块每日发帖之星
日期:2016-05-12 06:20:00每日论坛发贴之星
日期:2016-05-12 06:20:00操作系统版块每日发帖之星
日期:2016-05-14 06:20:00程序设计版块每日发帖之星
日期:2016-05-31 06:20:00每日论坛发贴之星
日期:2016-05-31 06:20:00
发表于 2018-06-04 19:28 |显示全部楼层
# [ /home/soio/1bs/awks ] {2018-06-04 19:22:27}
: 1528111347:0;➜  echo "tt22hhHHjjjkkk jjjj 2-4.1"|awk -F "" '/j/{for(i=1;i<=NF;i++){a[$i]++}}END{for(j in a){printf "[\""j"\"]" a[j]}}'
["4"]1["h"]2["j"]7["k"]3["-"]1[" "]2["."]1["H"]2["1"]1["2"]3["t"]2
                                                              
##要求如下:
tt22hhHH["j"]3kkk ["j"]4 2-4.1

论坛徽章:
21
申猴
日期:2014-10-10 15:56:39射手座
日期:2014-10-10 15:57:18黑曼巴
日期:2018-05-14 11:05:122016科比退役纪念章
日期:2018-05-14 11:05:0715-16赛季CBA联赛之北控
日期:2018-05-14 11:05:0015-16赛季CBA联赛之江苏
日期:2017-02-27 18:11:0715-16赛季CBA联赛之上海
日期:2018-08-15 09:48:5415-16赛季CBA联赛之佛山
日期:2018-07-20 17:14:23
发表于 2018-06-05 09:41 |显示全部楼层
本帖最后由 chengchow 于 2018-06-05 09:43 编辑
  1. <div class="blockcode"><blockquote>[root@AnsibleS10 ~]# echo "tt22hhHHjjjkkk jjjj 2-4.1" | awk -F "" 'BEGIN{b=1;a="t"}{for(i=1;i<=NF;i++){if($i!=a){printf "[\"%-s\"]%-s",a,i-b;b=i}a=$i}}END{printf "[\"%-s\"]%-s",a,i-b}'
  2. ["t"]2["2"]2["h"]2["H"]2["j"]3["k"]3[" "]1["j"]4[" "]1["2"]1["-"]1["4"]1["."]1["1"]1
复制代码

论坛徽章:
3
15-16赛季CBA联赛之青岛
日期:2018-07-09 14:17:2815-16赛季CBA联赛之八一
日期:2018-08-06 15:30:0515-16赛季CBA联赛之广东
日期:2018-08-09 09:11:21
发表于 2018-06-05 10:14 |显示全部楼层
  1. echo 'import re;a="tt22hhHHjjjkkk jjjj 2-4.1";a1="[\"j\"]%s" % a.split()[0].count("j");a2="[\"j\"]%s" % a.split()[1].count("j");print("%s %s %s" % (re.sub("j+",a1,a.split()[0]),re.sub("j+",a2,a.split()[1]),a.split()[2]))'|python
  2. tt22hhHH["j"]3kkk ["j"]4 2-4.1
复制代码

用awk 大概要写的更长?最后发现写那么长就是拼接下字符串

论坛徽章:
6
程序设计版块每日发帖之星
日期:2016-05-11 06:20:00操作系统版块每日发帖之星
日期:2016-05-12 06:20:00每日论坛发贴之星
日期:2016-05-12 06:20:00操作系统版块每日发帖之星
日期:2016-05-14 06:20:00程序设计版块每日发帖之星
日期:2016-05-31 06:20:00每日论坛发贴之星
日期:2016-05-31 06:20:00
发表于 2018-06-05 11:10 |显示全部楼层
本帖最后由 1cpuer 于 2018-06-05 11:23 编辑

回复 3# christmas1102

: 1528168117:0;➜  python 'import re;a1="[\"j\"]%s" % a.split()[0].count("j");a2="[\"j\"]%s" % a.split()[1].count("j");print("%s %s %s" % (re.sub("j+",a1,a.split()[0]),re.sub("j+",a2,a.split()[1]),a.split()[2]))' kk-1.kf
python: can't open file 'import re;a1="[\"j\"]%s" % a.split()[0].count("j");a2="[\"j\"]%s" % a.split()[1].count("j");print("%s %s %s" % (re.sub("j+",a1,a.split()[0]),re.sub("j+",a2,a.split()[1]),a.split()[2]))': [Errno 2] No such file or directory

作用与文件不会啊
: 1528168765:0;➜  cat kk-1.kf                                                                                                                                          
tt22hhHHjjjkkk jjjj 2-4.1

论坛徽章:
3
15-16赛季CBA联赛之青岛
日期:2018-07-09 14:17:2815-16赛季CBA联赛之八一
日期:2018-08-06 15:30:0515-16赛季CBA联赛之广东
日期:2018-08-09 09:11:21
发表于 2018-06-05 11:13 |显示全部楼层
本帖最后由 christmas1102 于 2018-06-05 13:07 编辑

回复 4# 1cpuer

貌似明白你意思了?

  1. cat p.py
  2. #!/usr/bin/python
  3. import re,sys
  4. with open(sys.argv[1], 'r+') as f:
  5.   a = f.read()
  6.   a0 = "[\"j\"]%s" % a.split()[0].count("j")
  7.   a1 = "[\"j\"]%s" % a.split()[1].count("j")
  8. print("%s %s %s" % (re.sub("j+",a0,a.split()[0]),re.sub("j+",a1,a.split()[1]),a.split()[2]))
复制代码

------
  1. cat file1
  2. tt22hhHHjjjkkk jjjj 2-4.1
复制代码

------
  1. ./p.py file1
复制代码


如果file1 不在你的当前工作目录下,就需要加绝对路径

但是这样写我怕被版主踢到别的板块,还是写在shell命令行的合规

论坛徽章:
6
程序设计版块每日发帖之星
日期:2016-05-11 06:20:00操作系统版块每日发帖之星
日期:2016-05-12 06:20:00每日论坛发贴之星
日期:2016-05-12 06:20:00操作系统版块每日发帖之星
日期:2016-05-14 06:20:00程序设计版块每日发帖之星
日期:2016-05-31 06:20:00每日论坛发贴之星
日期:2016-05-31 06:20:00
发表于 2018-06-05 17:02 |显示全部楼层
回复 2# chengchow

为什么 a="t" # t 字符赋值与 a 变量的意思吗 ?

论坛徽章:
19
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:33黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:0915-16赛季CBA联赛之八一
日期:2018-07-03 16:56:4615-16赛季CBA联赛之深圳
日期:2018-06-15 14:59:3715-16赛季CBA联赛之青岛
日期:2018-06-08 13:45:2815-16赛季CBA联赛之同曦
日期:2018-06-04 19:42:2015-16赛季CBA联赛之山东
日期:2018-05-30 12:44:59CU十四周年纪念徽章
日期:2018-05-15 11:36:3815-16赛季CBA联赛之广东
日期:2018-05-14 09:52:42
发表于 2018-06-05 17:53 |显示全部楼层
回复 1# 1cpuer


  1. echo "tt22hhHHjjjkkk jjjj 2-4.1"|awk '{for(i=1;i<=NF;i++){b=match($i,"^([^j]*)(j{3,})([^j]*)$",a);$i=b?a[1]"[j]"length(a[2])""a[3]:$i}}1'
  2. tt22hhHH[j]3kkk [j]4 2-4.1
复制代码

论坛徽章:
6
程序设计版块每日发帖之星
日期:2016-05-11 06:20:00操作系统版块每日发帖之星
日期:2016-05-12 06:20:00每日论坛发贴之星
日期:2016-05-12 06:20:00操作系统版块每日发帖之星
日期:2016-05-14 06:20:00程序设计版块每日发帖之星
日期:2016-05-31 06:20:00每日论坛发贴之星
日期:2016-05-31 06:20:00
发表于 2018-06-05 18:15 |显示全部楼层
回复 7# wh7211

# [ /home/soio/1bs/awks ] {2018-06-05 18:13:21}
: 1528193601:0;➜  echo "tt22hhHHjjjkkk jjjj 2-4.1 jjjjjssjjjjjjj"|awk '{for(i=1;i<=NF;i++){b=match($i,"^([^j]*)(j{3,})([^j]*)$",a);$i=b?a[1]"[j]"length(a[2])""a[3]i}}1'
tt22hhHH[j]3kkk [j]4 2-4.1 jjjjjssjjjjjjj


a[1],a[2],a[3]
a[x]

论坛徽章:
19
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:33黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:0915-16赛季CBA联赛之八一
日期:2018-07-03 16:56:4615-16赛季CBA联赛之深圳
日期:2018-06-15 14:59:3715-16赛季CBA联赛之青岛
日期:2018-06-08 13:45:2815-16赛季CBA联赛之同曦
日期:2018-06-04 19:42:2015-16赛季CBA联赛之山东
日期:2018-05-30 12:44:59CU十四周年纪念徽章
日期:2018-05-15 11:36:3815-16赛季CBA联赛之广东
日期:2018-05-14 09:52:42
发表于 2018-06-05 19:33 |显示全部楼层
本帖最后由 wh7211 于 2018-06-06 09:47 编辑

回复 8# 1cpuer


  1. echo "tt22hhHHjjjkkk jjjj 2-4.1 jjjjjssjjjjjjj"|awk 'function p(){if($0){match($0,"^([^j]*)(j{3,}|$)",a);b[++i]=a[1];b[++i]=a[2]?"[j]"length(a[2]):"";gsub("^([^j]*)(j{3,}|$)","");p()}else{for(j=1;j<=i;j++){c=c?c""b[j]:b[j]};print c}}{p()}'
  2. tt22hhHH[j]3kkk [j]4 2-4.1 [j]5ss[j]7
复制代码

论坛徽章:
3
15-16赛季CBA联赛之青岛
日期:2018-07-09 14:17:2815-16赛季CBA联赛之八一
日期:2018-08-06 15:30:0515-16赛季CBA联赛之广东
日期:2018-08-09 09:11:21
发表于 2018-06-05 20:20 |显示全部楼层
  1. [root@bd69 ~]# echo "tt22hhHHjjjkkk jjjj 2-4.1"|awk '{for(i=1;i<=NF;i++){b=match($i,"^([^j]*)(j{3,})([^j]*)$",a);$i=b?a[1]"[j]"length(a[2])""a[3]:$i}}1'
  2. tt22hhHHjjjkkk jjjj 2-4.1
  3. [root@bd69 ~]#
  4. [root@bd69 ~]#
  5. [root@bd69 ~]# echo "tt22hhHHjjjkkk jjjj 2-4.1 jjjjjssjjjjjjj"|awk 'function p(){if($0){match($0,"^([^j]*)(j{3,}|$)",a);b[++i]=a[1];b[++i]=a[2]?"[j]"length(a[2]):"";gsub("^([^j]*)(j{3,}|$)","");p()}else{for(j=1;j<=i;j++){c=c?c""b[j]:b[j]};print c}}{p()}'
  6. Segmentation fault (core dumped)
  7. [root@bd69 ~]#
复制代码


为啥我都跑不出来?
awk --version
GNU Awk 3.1.7
您需要登录后才可以回帖 登录 | 注册

本版积分规则

第67期:Neo4j图数据库平台架构最佳实践
【微学堂】10月18日 20:00(周四)

当下,数据的规模和类型每时每刻都在呈几何级数的增长,仅能够管理大量的数据是不够的,关键是能从海量数据中发掘出有用的信息,特别是数据之间的关联,能高效存储和处理数据之间关联的新型数据库为图数据库。 本讲座将介绍Neo4j图数据库的基本概念、设计特点、架构和经典应用场景实战分享。

进入课堂>>
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:wangnan@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP