免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5244 | 回复: 8

[文本处理] 利用名称来截取字段之间内容 [复制链接]

论坛徽章:
2
15-16赛季CBA联赛之四川
日期:2020-08-18 20:19:4815-16赛季CBA联赛之青岛
日期:2022-01-19 11:51:49
发表于 2022-01-18 10:56 |显示全部楼层
本帖最后由 unix520 于 2022-01-20 20:17 编辑

提前祝大家2022新的一年更厉害更强大

问题来了, 如下
如果发现A.txt文本内容行的倒数第一个字符串是 "公司",  则利用右边该名称 "科尼达" 来截取B.txt 文本中 "科尼达" 至 "已执行"字段之间内容行,   但是请注意, A.txt文本内容行的倒数第一个 "公司"的 >右边名称 "科尼达"是由系统自动记录的, 会动态随时改变记录着其它不同名称,  并不是固定的, 可能是腾尔微, 可能是科尼达, 也有可能是其它一些未知名称 所以需要先获取到A.txt文本中倒数第一个字符串"公司"右边的名称来截取B.txt 文本中字段之间内容行,这是最终目的

A.txt文本中要匹配
倒数第一个字符串 "公司"  及右边名称

而B.txt文本中则要匹配最后一个字符串是 "企业" 的名称至"已执行"字段之间

似乎需要获取到A.txt文本中倒数第一个字符串"公司"右边的名称来截取B.txt 文本中字段之间内容行
需要考虑执行效率, 最好用Awk用写, 但是也可以用其它
谢谢



论坛徽章:
2
15-16赛季CBA联赛之四川
日期:2020-08-18 20:19:4815-16赛季CBA联赛之青岛
日期:2022-01-19 11:51:49
发表于 2022-01-18 13:16 |显示全部楼层
我这样表达不知道大家能不能看懂,  如不,  请提出凝问, 我可再叙述

论坛徽章:
6
15-16赛季CBA联赛之浙江
日期:2021-07-14 11:18:4315-16赛季CBA联赛之浙江
日期:2021-08-20 17:26:1015-16赛季CBA联赛之天津
日期:2021-09-01 10:56:4619周年集字徽章-19
日期:2021-10-12 11:08:032016科比退役纪念章
日期:2021-10-12 11:33:4515-16赛季CBA联赛之深圳
日期:2021-11-11 14:25:38
发表于 2022-01-18 15:28 |显示全部楼层
本帖最后由 a5love3n 于 2022-01-18 15:37 编辑
  1. awk -F">" 'NR==FNR{if($1~/公司/){a=$2}}NR>FNR{if($2~a){d=$0;getline;if($2~/企业/){b=0;next}else{print d;b=1}};if(b==1){print $0;if($2~/已执行/){print "";b=0}}}'  A.txt B.txt
复制代码

论坛徽章:
2
15-16赛季CBA联赛之四川
日期:2020-08-18 20:19:4815-16赛季CBA联赛之青岛
日期:2022-01-19 11:51:49
发表于 2022-01-18 17:07 |显示全部楼层
本帖最后由 unix520 于 2022-01-20 20:18 编辑

回复 3# a5love3n

您好, 您的理解完全正确,  但是我由于匆忙,  Sorry, 似乎在题目B.txt中漏写了一些字段, 导致需求结果有些不同,  我现已添加更正了题目, 请帮忙再看一下  谢谢  
在B.txt 添加这种字段后情况





论坛徽章:
2
15-16赛季CBA联赛之四川
日期:2020-08-18 20:19:4815-16赛季CBA联赛之青岛
日期:2022-01-19 11:51:49
发表于 2022-01-18 17:43 |显示全部楼层
我偿试在这里加上简名:字段, 但似乎不行
awk -F">" 'NR==FNR{if($1~/公司/){a=$2}}NR>FNR{if($2~a){d=$0;getline;if($2~/企业 简名:/){b=0;next}else{print d;b=1}};if(b==1){print $0;if($2~/已执行/){print "";b=0}}}'  A.txt B.txt

论坛徽章:
2
15-16赛季CBA联赛之四川
日期:2020-08-18 20:19:4815-16赛季CBA联赛之青岛
日期:2022-01-19 11:51:49
发表于 2022-01-19 10:19 |显示全部楼层
各位大哥题目已完全编缉好了

论坛徽章:
6
15-16赛季CBA联赛之浙江
日期:2021-07-14 11:18:4315-16赛季CBA联赛之浙江
日期:2021-08-20 17:26:1015-16赛季CBA联赛之天津
日期:2021-09-01 10:56:4619周年集字徽章-19
日期:2021-10-12 11:08:032016科比退役纪念章
日期:2021-10-12 11:33:4515-16赛季CBA联赛之深圳
日期:2021-11-11 14:25:38
发表于 2022-01-19 11:54 |显示全部楼层
我测试了一下,问题应该出在文件格式上,按照你给出的文件样本,A文件中 >和科尼达之间存在空格,而B文件中  简名:科尼达 科尼达前面没有空格
我的做法是将A文件中 >和企业名之间的空格删除掉
然后使用下面的语句
  1. awk -F">" 'NR==FNR{if($1~/公司/){a="简名:"$2}}NR>FNR{if($2~a){d=$0;getline;if($2~/企业/){b=0;next}else{print d;b=1}};if(b==1){print $0;if($2~/已执行/){print "";b=0}}}' A.txt B.txt
复制代码

论坛徽章:
6
15-16赛季CBA联赛之浙江
日期:2021-07-14 11:18:4315-16赛季CBA联赛之浙江
日期:2021-08-20 17:26:1015-16赛季CBA联赛之天津
日期:2021-09-01 10:56:4619周年集字徽章-19
日期:2021-10-12 11:08:032016科比退役纪念章
日期:2021-10-12 11:33:4515-16赛季CBA联赛之深圳
日期:2021-11-11 14:25:38
发表于 2022-01-19 11:58 |显示全部楼层
回复 5# unix520

删除A文件中的空格可以使用如下语句
sed -i 's/> \+/>/' A.txt

论坛徽章:
2
15-16赛季CBA联赛之四川
日期:2020-08-18 20:19:4815-16赛季CBA联赛之青岛
日期:2022-01-19 11:51:49
发表于 2022-01-19 14:11 |显示全部楼层
本帖最后由 unix520 于 2022-01-19 20:39 编辑

这题不算      
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP