根据连续的模式对从文件中提取行,然后输出到单独的文件

根据连续的模式对从文件中提取行,然后输出到单独的文件

a)我有一个巨大的文件,我需要从中提取与特定模式匹配的所有行,让我们说 paterna 和 patternb。所以我需要提取以patterna 开头的所有行,例如^patterna,以及所有以patternb 开头的行,例如^patternb。然后将输出写入名为patternapatternb.txt的文件

b)我怎样才能用循环来完成这项工作。例如,对patterna2和patternb2执行相同的操作,然后对patterna3和patternb3执行相同的操作,因此该文件将被解析多次,每次都会使用新的模式对来匹配行,最后输出将是三个文件:

图案apatternb.txt
图案a2patternb2.txt
图案a3patternb3.txt

示例输入
001 876786
989 74563
734 87387


600:其他文本
601:其他文本

001 712345
345 87238


600:某个文本
702:不同文本

001 5342
989 745632
734 873872


600:其他文本
601:其他文本

001 987 345 87238


600:某个文本
702:不同文本

模式a:^001 模式b:600:一些文本

输出将是一个名为 600: sometext.txt 的文件

001 876786
600:某个文本
001 712345
600:某个文本
001 5342
600:某个文本
001 987
600:某个文本

实际上,这对模式中的第一个元素是 ^001,第二个元素是每次出现的以三位数字开头的行,后跟 :,然后是空格

答案1

awk '/patterna/ || /patternb/ { print > "patternapatternb.txt" }
     /patternc/ || /patternd/ { print > "patterncpatternd.txt" }
     # ... more rules following same scheme; replace with real patterns ...
     /patterny/ || /patternz/ { print > "patternypatternz.txt" }' inputfile

将代码放入script.awk文件中并使用awk -f script.awk inputfile.或者像上面那样创建一个多行命令行。在 GNU Bash shell 中,可以使用*插入换行符Ctrl-V Ctrl-J

只有一个循环(由 执行的隐式记录处理循环awk)。只需要遍历该文件一次。


* 仅当在行尾添加新字符且未加引号时,才可以使用 Enter 在引号之间添加换行符。

相关内容