目前,我使用“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
为了做到这一点,你有任何建议吗?
答案 0 :(得分:0)
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
在打印之前添加行模式=使用WORD的值而不是交换2最后一行
答案 1 :(得分:0)
这是awk
可以执行的工作:
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
它将所有模式存储在数组a
中,并将它们存储在变量n
中
然后它测试每个块是否包含图案,然后打印块和使用的图案。