如何在模式(AWK)中找到匹配字符串?

时间:2015-07-22 03:14:31

标签: regex awk

我的文字文件包含开始' - 主机' 结束&#39 ;;' ,这个模式在文件中出现的次数如下:

- 主持人(第一)Sid(queen1)

- 王子公主#/ king 1/1

- 主持人(第一)Sid(queen2)

- 王子公主#/ king 2/2

- 主持人(第一)Sid(queen3)

- dir princess#/ king 3/3

我想要的结果如下:

queen1 1/1

queen2 2/2

queen3 3/3

使用 AWK ,我想我可以像下面那样指定包含此模式的块。但是,我将第二个模式置于模式中时出错。

你能帮我完成这个要求吗?谢谢!

BEGIN {
}

/-- Host/,/;/ { /prince/ { print $3 } }

END 

1 个答案:

答案 0 :(得分:1)

$ awk -F'[ ()]+' '/-- Host/,/;/ { if (/-- Host/) printf "%s ",$5; else if (/prince/) print $4;}' file
queen1 1/1
queen2 2/2
queen3 3/3

如何运作

  • -F'[ ()]+'

    这告诉awk使用任意数量的空白和parens的任意组合作为字段分隔符。

  • /-- Host/,/;/

    这仅选择以-- Host开头并以;结尾的行组。大括号后面的命令仅对这些组中的行执行。

  • { if (/-- Host/) printf "%s ",$5; else if (/prince/) print $4;}

    如果该行包含-- Host,则我们打印其第五个字段。否则,如果它包含prince,我们将打印其第四个字段。