免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 3779 | 回复: 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

论坛徽章:
24
申猴
日期: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:2315-16赛季CBA联赛之佛山
日期:2019-09-10 18:08:4615-16赛季CBA联赛之山西
日期:2020-03-26 09:40:5115-16赛季CBA联赛之佛山
日期:2020-05-08 09:03:54
发表于 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
复制代码

论坛徽章:
4
15-16赛季CBA联赛之青岛
日期:2018-07-09 14:17:2815-16赛季CBA联赛之八一
日期:2018-08-06 15:30:0515-16赛季CBA联赛之广东
日期:2018-08-09 09:11:2115-16赛季CBA联赛之佛山
日期:2019-02-14 09:26:31
发表于 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

论坛徽章:
4
15-16赛季CBA联赛之青岛
日期:2018-07-09 14:17:2815-16赛季CBA联赛之八一
日期:2018-08-06 15:30:0515-16赛季CBA联赛之广东
日期:2018-08-09 09:11:2115-16赛季CBA联赛之佛山
日期:2019-02-14 09:26:31
发表于 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 变量的意思吗 ?

论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
发表于 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]

论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
发表于 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
复制代码

论坛徽章:
4
15-16赛季CBA联赛之青岛
日期:2018-07-09 14:17:2815-16赛季CBA联赛之八一
日期:2018-08-06 15:30:0515-16赛季CBA联赛之广东
日期:2018-08-09 09:11:2115-16赛季CBA联赛之佛山
日期:2019-02-14 09:26:31
发表于 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
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP