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

时间:2018-07-16 22:41:53

标签: awk

您好,谢谢您的帮助。

试图用awk创建脚本,但失败了,我想知道是否可以这样做。例如,从输入文件中读取并删除两个模式之间的行。

文件1包含:

user2

和File2包含以下行:

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一次拍摄吗?

致谢。

1 个答案:

答案 0 :(得分:1)

给出:

$ 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;i<=NF;i++) skip[$i]; next}
      $2 in skip {next}
      1' <(echo "user2 user3") file
ID: user1
Telpephone: 1234-5678