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 在引号之间添加换行符。