awk一次从输入文件读取两个模式之间的删除

awk一次从输入文件读取两个模式之间的删除,awk,Awk,您好,提前感谢您的帮助 尝试用awk制作脚本,但失败了,我想知道这是否可行。例如,从输入文件读取并删除两个模式之间的行 文件1包含: user2 文件2包含以下行: ID: user1 Telpephone: 1234-5678 ID: user2 Telpephone: 1324-6598 ID: user3 Telpephone: 9087-6543 所需的输出如下所示: ID: user1 Telpephone: 1234-5678 ID: user3 Telpephone: 9

您好,提前感谢您的帮助

尝试用awk制作脚本,但失败了,我想知道这是否可行。例如,从输入文件读取并删除两个模式之间的行

文件1包含:

user2
文件2包含以下行:

ID: user1
Telpephone: 1234-5678

ID: user2
Telpephone: 1324-6598

ID: user3
Telpephone: 9087-6543
所需的输出如下所示:

ID: user1
Telpephone: 1234-5678

ID: user3
Telpephone: 9087-6543
我可以在一个循环中完成,但是大文件占用的时间太长了,用awk一次就可以完成吗

问候。

给予:

$ cat skip
user2
$ cat file
ID: user1
Telpephone: 1234-5678

ID: user2
Telpephone: 1324-6598

ID: user3
Telpephone: 9087-6543
在段落模式下使用
awk

awk  'BEGIN{RS=""; ORS="\n\n"}
      FNR==NR{for (i=1;i<=NF;i++) skip[$i]; next}
      $2 in skip {next}
      1' skip file
ID: user1
Telpephone: 1234-5678

ID: user3
Telpephone: 9087-6543
awk'BEGIN{RS=”“;ORS=“\n\n”}

FNR==NR{for(i=1;iIt不完全清楚您试图做什么。给出的示例建议从文件2中删除与文件1中的内容/模式匹配的行。但标题建议在匹配之间删除?在您的示例中,如果有另一行包含user2,会发生什么?您会删除它们之间的所有行吗?如果有两行,三行,四…更多这样的行?排除最外层匹配之间的所有行?或交错?在正确的匹配之间删除,例如user2和第一个空格之间的匹配。如果查找1、2、3,则删除所有这些行并在它们之间删除行。例如,使用命令awk'/user2/,/^$/{next}{print}'文件2,可以删除user2和空白之间的所有行。问题或我尝试做的是,使用巨大的多输入字符串,例如10000个用户输入,文件大小为2到1GB。是否有可能跳过多个匹配?$cat skip user1 user2$cat file ID:user1-Telpephone:1234-5678 ID:user2-Telpephone:1324-6598 ID:user3-Telpephone:9087-6543输出:ID:user3-Telpephone:9087-6543是的。已修复。只需将匹配项放在空格分隔的行或单独的行中。向dawg致意,正如您所提到的,它工作得非常好。
awk  'BEGIN{RS=""; ORS="\n\n"}
      FNR==NR{for (i=1;i<=NF;i++) skip[$i]; next}
      $2 in skip {next}
      1' <(echo "user2 user3") file
ID: user1
Telpephone: 1234-5678