如何搜索文本并返回具有附加值的块(UNIX)
目前,我使用SED命令返回模式列表中包含单词的每个文本块 以下是我的文件结构*文件大小约为20Go:如何搜索文本并返回具有附加值的块(UNIX),unix,search,sed,Unix,Search,Sed,目前,我使用SED命令返回模式列表中包含单词的每个文本块 以下是我的文件结构*文件大小约为20Go: BEGIN blabla blabla GREAT blabla END BEGIN blabla blabla END BEGIN blabla USA blabla END 这里是我的模式列表的摘录,大约有900个条目 GREAT USA ... 为此,我使用以下命令: sed -n '/BEGIN/{x;d};H;/END/{x;s/\(GREAT\|USA\)/&/mp}
BEGIN
blabla
blabla GREAT blabla
END
BEGIN
blabla
blabla
END
BEGIN
blabla USA
blabla
END
这里是我的模式列表的摘录,大约有900个条目
GREAT
USA
...
为此,我使用以下命令:
sed -n '/BEGIN/{x;d};H;/END/{x;s/\(GREAT\|USA\)/&/mp}' myfile.txt>result.txt
此命令正在执行此任务,但为了进一步处理,我需要知道找到的每个块的模式列表中的单词。例如,我想要以下退货:
BEGIN
blabla
blabla GREAT blabla
Patern=GREAT
END
BEGIN
blabla USA
blabla
Patern=USA
END
你对此有什么建议吗
sed -n '/BEGIN/{x;d};H;/END/{x;s/\(GREAT\|USA\)/&\
patern=\1/m;s/\(END\)\(\n\)\(.*\)/\3\2\1/p;}' myfile.txt>result.txt
这是awk可以做的一项工作,即在打印前,添加带有单词值的行patern=而不是交换2最后一行:
它将所有模式存储在数组a中,并将它们的数量存储在变量n中
然后测试每个块是否包含图案,然后打印块和使用的图案 @tripleee Ups错过了这个。更新了我的帖子。
awk -v RS="" -v ORS="\n\n" 'BEGIN {n=split("USA GREAT",a," ")} {for (i=1;i<=n;i++) if ($0~a[i]) print $0"\nPatern="a[i]}' file
BEGIN
blabla
blabla GREAT blabla
END
Patern=GREAT
BEGIN
blabla USA
blabla
END
Patern=USA