0%

Awk Special Pattern - Begin & END

Awk

1
2
# how to use awk
awk 'script' filename

Special Pattern

1
/pattern/ { actions }

Begin & END

1
2
3
4
5
6
awk '
BEGIN { actions }
/pattern/ { actions }
/pattern/ { actions }
END { actions }
' filenames
  • BEGIN { actions }
    在读取任何输入前执行一次 actions
  • END { actions }
    读取所有输入之后执行一次 actions

Example

1
2
# e.g.: calculate average of some column
awk -F'\t' 'BEGIN{sum = 0;}{sum += $1;} END{print sum/NR}' filename

Notes

  • 表达式 { 语句 }
    对于表达式为真(即,非零或非空)的行,执行语句

  • /正则表达式/ { 语句 }
    如果输入行包含字符串与正则表达式相匹配,则执行 语句

  • 组合模式 { 语句 }
    一个组合模式通过与(&&),或(||),非(|),以及括弧来组合多个表达式;对于组合模式为真的每个输入行,执行语句

  • 模式1,模式2 { 语句 }
    范围模式(range pattern)匹配从与模式1相匹配的行到与模式2相匹配的行(包含该行)之间的所有行,对于这些输入行,执行语句。

BEGIN和END不与其他模式组合。范围模式不可以是任何其他模式的一部分。BEGIN和END是仅有的必须搭配动作的模式。