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 编辑
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文件中 >和企业名之间的空格删除掉
然后使用下面的语句
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