免费注册 查看新帖 |

Chinaunix

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

[文本处理] 求教各位大手子 [复制链接]

论坛徽章:
1
戌狗
日期:2014-06-09 14:33:38
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2020-11-05 11:20 |只看该作者 |倒序浏览
15可用积分

某个更新日志,会已V数字做为版本号,每次取出最新版本号的更新内容(只以Vxx为准)
现在问题是这个版本号不一定是按顺序的,最新版本可能在中间,也可能在第一段 或者最后一段。

需求 取出
   V0.4-张三-2020/11/4 12:00
   去掉发邮件步骤
   调整流程(由并行改为串行)


原始文本示例:
   V0.1-张三-2020/11/4 14:00
   增加AAAA
   V0.2-张三-2020/11/4 12:00
   调整子工作流流程(由并行改为串行)
   V0.4-张三-2020/11/4 12:00
   去掉发邮件步骤
   调整流程(由并行改为串行)
   V0.3-张三-2020/11/4 12:00
   去掉发邮件步骤
   调整流程(由并行改为串行)

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-10-11 06:20:0015-16赛季CBA联赛之山东
日期:2016-05-28 18:18:5615-16赛季CBA联赛之新疆
日期:2017-04-12 22:55:4715-16赛季CBA联赛之青岛
日期:2017-06-26 18:30:0315-16赛季CBA联赛之四川
日期:2017-09-04 12:27:0315-16赛季CBA联赛之福建
日期:2018-02-09 14:28:3315-16赛季CBA联赛之同曦
日期:2018-04-17 12:43:3415-16赛季CBA联赛之浙江
日期:2018-07-14 13:27:4015-16赛季CBA联赛之吉林
日期:2018-09-13 15:48:2915-16赛季CBA联赛之新疆
日期:2016-05-07 05:05:3215-16赛季CBA联赛之八一
日期:2016-03-14 12:32:06程序设计版块每日发帖之星
日期:2015-12-12 06:20:00
2 [报告]
发表于 2020-11-05 11:20 |只看该作者
  1. awk -F 'V|-' '/^V/{c=$2;a=a>$2?a:$2}{b[c]=$0~/^V/?$0:b[c]"\n"$0}END{print b[a]}' file

  2. perl -0nE'say+(sort split/\n(?=^V)/m)[-1]' file
复制代码

论坛徽章:
1
戌狗
日期:2014-06-09 14:33:38
3 [报告]
发表于 2020-11-05 14:10 |只看该作者
大佬们  人呢?  

论坛徽章:
0
4 [报告]
发表于 2020-11-05 17:23 |只看该作者
楼上Baby大神威武,perl用的炉火纯青!牛!学习了!用其他语言实现只能趟了。。。。
  1. import re

  2. in_str = '''V0.1-张三-2020/11/4 14:00
  3.    增加AAAA
  4.    V0.2-张三-2020/11/4 12:00
  5.    调整子工作流流程(由并行改为串行)
  6.    V0.4-张三-2020/11/4 12:00
  7.    去掉发邮件步骤
  8.    调整流程(由并行改为串行)
  9.    V0.3-张三-2020/11/4 12:00
  10.    去掉发邮件步骤
  11.    调整流程(由并行改为串行)
  12.    '''


  13. def split_by_pattern():
  14.     pattern = re.compile(r"([Vv]\d\.\d.*?\n)")
  15.     res = pattern.split(in_str)
  16.     return res


  17. def find_versions():
  18.     pattern = re.compile(r"([Vv]\d\.\d)")
  19.     res = pattern.findall(in_str)  # type: list

  20.     return [float(re.sub("[Vv]", "", x)) for x in res]


  21. def find_latest_version():
  22.     version_list = find_versions()
  23.     return max(version_list)


  24. def find_right_next_version():
  25.     version_list = find_versions()
  26.     latest_version_index = version_list.index(max(version_list))
  27.     if len(version_list) > latest_version:
  28.         right_next = version_list[latest_version_index + 1]
  29.         return right_next


  30. if __name__ == '__main__':
  31.     latest_version = find_latest_version()
  32.     right_next_version = find_right_next_version()

  33.     split_list = split_by_pattern()

  34.     selected_version_line = ""
  35.     for item in split_list:
  36.         if item.strip().startswith("V" + str(latest_version)):
  37.             selected_version_line = item
  38.             break

  39.     selected_version_index = split_list.index(selected_version_line)

  40.     if right_next_version is not None:
  41.         right_next_version_line = ""
  42.         for item in split_list:
  43.             if item.strip().startswith("V" + str(right_next_version)):
  44.                 right_next_version_line = item
  45.                 break

  46.         right_next_version_index = split_list.index(right_next_version_line)

  47.         print "".join(split_list[selected_version_index:right_next_version_index])
  48.     else:
  49.         print "".join(split_list[selected_version_index:])
复制代码

论坛徽章:
0
5 [报告]
发表于 2020-11-06 16:28 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
10
15-16赛季CBA联赛之同曦
日期:2016-06-11 19:22:4115-16赛季CBA联赛之深圳
日期:2020-05-31 16:13:5615-16赛季CBA联赛之同曦
日期:2020-01-28 12:42:47每日论坛发贴之星
日期:2016-08-09 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00每日论坛发贴之星
日期:2016-07-12 06:20:00程序设计版块每日发帖之星
日期:2016-07-12 06:20:00程序设计版块每日发帖之星
日期:2016-07-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-04 06:20:0015-16赛季CBA联赛之佛山
日期:2021-02-26 09:33:41
6 [报告]
发表于 2020-11-20 15:35 |只看该作者
root@aliyun:~/lp/cu# cat a.txt|awk  '/^V0.4/{flag=1}/^V/&&!/^V0.4/{flag=0}flag'
V0.4-张三-2020/11/4 12:00
去掉发邮件步骤
调整流程(由并行改为串行)
root@aliyun:~/lp/cu# cat a.txt|awk  '/^V0.3/{flag=1}/^V/&&!/^V0.3/{flag=0}flag'
V0.3-张三-2020/11/4 12:00
去掉发邮件步骤
调整流程(由并行改为串行)
root@aliyun:~/lp/cu# cat a.txt|awk  '/^V0.2/{flag=1}/^V/&&!/^V0.2/{flag=0}flag'
V0.2-张三-2020/11/4 12:00
调整子工作流流程(由并行改为串行)
root@aliyun:~/lp/cu# cat a.txt
V0.1-张三-2020/11/4 14:00
增加AAAA
V0.2-张三-2020/11/4 12:00
调整子工作流流程(由并行改为串行)
V0.4-张三-2020/11/4 12:00
去掉发邮件步骤
调整流程(由并行改为串行)
V0.3-张三-2020/11/4 12:00
去掉发邮件步骤
调整流程(由并行改为串行)

论坛徽章:
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
7 [报告]
发表于 2020-11-22 14:38 |只看该作者
回复 1# kingkingdm


  1. cat 1
  2. V0.1-张三-2020/11/4 14:00
  3. 增加AAAA
  4. V0.2-张三-2020/11/4 12:00
  5. 调整子工作流流程(由并行改为串行)
  6. V0.4-张三-2020/11/4 12:00
  7. 去掉发邮件步骤
  8. 调整流程(由并行改为串行)
  9. V0.3-张三-2020/11/4 12:00
  10. 去掉发邮件步骤
  11. 调整流程(由并行改为串行)

  12. awk '/^V/{a=0;match($0,"^V([^-]+)-.*$",b);if(c<b[1]){a=1;c=b[1]}}a{d[c]=d[c]?d[c]"\n"$0:$0}END{print d[c]}' 1
  13. V0.4-张三-2020/11/4 12:00
  14. 去掉发邮件步骤
  15. 调整流程(由并行改为串行)
复制代码

论坛徽章:
1
戌狗
日期:2014-06-09 14:33:38
8 [报告]
发表于 2020-11-30 19:28 |只看该作者
发现 v0.9  v1.0  就不行

论坛徽章:
1
戌狗
日期:2014-06-09 14:33:38
9 [报告]
发表于 2020-11-30 19:34 |只看该作者
awk -F 'V0.|-' '/^V/{c=$2;a=a>$2?a2}{b[c]=$0~/^V/?$0:b[c]"\n"$0}END{print b[a]}' file
照着抄袭

论坛徽章:
0
10 [报告]
发表于 2022-11-17 10:38 |只看该作者
  1. awk -vRS='V' '{if(substr($1,0,3)>max){max=substr($1,0,3);a=$0}}END{printf RS""a}' 1
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP