Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何搜索文本并返回具有附加值的块(UNIX)_Unix_Search_Sed - Fatal编程技术网

如何搜索文本并返回具有附加值的块(UNIX)

如何搜索文本并返回具有附加值的块(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}

目前,我使用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}' 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