Chinaunix

标题: 利用名称来截取字段之间内容 [打印本页]

作者: unix520    时间: 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用写, 但是也可以用其它
谢谢




作者: unix520    时间: 2022-01-18 13:16
我这样表达不知道大家能不能看懂,  如不,  请提出凝问, 我可再叙述
作者: a5love3n    时间: 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
复制代码

作者: unix520    时间: 2022-01-18 17:07
本帖最后由 unix520 于 2022-01-20 20:18 编辑

回复 3# a5love3n

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






作者: unix520    时间: 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
作者: unix520    时间: 2022-01-19 10:19
各位大哥题目已完全编缉好了
作者: a5love3n    时间: 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
复制代码


作者: a5love3n    时间: 2022-01-19 11:58
回复 5# unix520

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

作者: unix520    时间: 2022-01-19 14:11
本帖最后由 unix520 于 2022-01-19 20:39 编辑

这题不算      




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2