我需要一个以 2 个文件作为输入的脚本方面的帮助:
File1: [TEXT] contains Paragraphs SEPARATED with BLANK LINES
File2: [SEARCH KEYS] Paragraphs SEPARATED with BLANK LINES
并创建一个输出文件:File3 - 其中包含来自 File1 的文本,除了与 File2 中提供的那些完全匹配的那些 PARAGRAPHS。
即脚本需要在 File2 中搜索 File1 中给定的每个段落。如果找到完美匹配(具有所有匹配行),则从输出文件 3 中删除匹配段落。
给定:2 个文件
File1:
PARA1_LINE1
PARA1_LINE2
PARA1_LINE3
PARA2_LINE1
PARA2_LINE2
PARA1_LINE1
PARA1_LINE2
PARA1_LINE3
File2:
PARA1_LINE1
PARA1_LINE2
PARA1_LINE3
PARA2_LINE1
要求的输出:
File3:
PARA2_LINE1
PARA2_LINE2
注意:第二段 [PARA2] 不是完整的匹配项,因此不应从文件 3 中省略
谢谢
最佳答案
这个 awk
应该可以工作:
awk -v RS= -v ORS='\n\n' 'NR==FNR{a[$0]++;next}!($0 in a)' file2 file1
- 我们通过设置
RS
变量来开启段落模式。 - 我们将整个段落作为关键字加载到文件 2 中的数组
a
。 - 如果在 file1 中不找到该段落,我们将打印它。
$ cat file1
PARA1_LINE1
PARA1_LINE2
PARA1_LINE3
PARA2_LINE1
PARA2_LINE2
PARA1_LINE1
PARA1_LINE2
PARA1_LINE3
$ cat file2
PARA1_LINE1
PARA1_LINE2
PARA1_LINE3
PARA2_LINE1
$ awk -v RS= -v ORS='\n\n' 'NR==FNR{a[$0]++;next}!($0 in a)' file2 file1
PARA2_LINE1
PARA2_LINE2
关于linux - 通过搜索另一个文件从文件中删除匹配段落,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22650213/