一. 命令awk简介

1. awk是一种编程语言,用于对文本和数据进行处理的

2. 具有强大的文本格式化能力

3. 利用命令awk,可以将一些文本整理成为我们想要的样子

4. 命令awk是逐行进行处理的

5. 之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。

二. grep、sed、awk的简单比较

1. 命令grep,更适合单纯的查找或匹配文本

2. 命令sed,更适合对匹配到的文本进行编辑

3. 命令awk,更适合文本格式化,对文本进行较复杂的格式处理

三. 命令awk基本语法

awk [options] 'pattern{action}' file

1. 在没有options和pattern的情况下,使用命令awk

grep awk性能 grep awk -f_分隔符

2. pattern包括两种特殊模式,分别是BEGIN和END

(1)BEGIN模式,是指命令在处理文本之前执行

grep awk性能 grep awk -f_awk -f 分隔符 命令_02

(2)END模式,是指命令在处理文本之后执行

grep awk性能 grep awk -f_grep awk性能_03

(3)BEGIN模式和END模式同时存在时,其中,BEGIN与END之间的{}相当于一个循环体,对文件中的每一行进行处理

grep awk性能 grep awk -f_分隔符_04

3. 常用的参数

(1)-F,用于指定输入分隔符

grep awk性能 grep awk -f_字段_05

(2)-v,用于设置变量的值

grep awk性能 grep awk -f_数组_06

grep awk性能 grep awk -f_grep awk性能_07

 从文件中输入变量

grep awk性能 grep awk -f_分隔符_08

四. 变量

awk中的变量分为内置变量和自定义变量两种

1. 内置变量

FS :输入字段分隔符,默认为空白字符

OFS :输出字段分隔符,默认为空白字符

RS :输入记录分隔符(输入换行符),指定输入时的换行符

ORS :输出记录分隔符(输出换行符),指定输出时的换行符

NF :当前行的字段数(当前行被分隔符分割成了几段)

NR :当前行的行号

FNR :不同文件分别计数

FILENAME :当前文件名

ARGV :数组,保存的是命令行所给定的各参数

ARGC :ARGC数组的个数

(1)FS:以“:”为字段输入分隔符,输出第1列和第2列

         1)使用-F选项指定输入分隔符

grep awk性能 grep awk -f_字段_05

       2)使用内置变量FS指定输入分隔符,需要注意的是,使用变量时,要使用-v选项来指定对应的变量

grep awk性能 grep awk -f_grep awk性能_10

(2)OFS:以“#”为字段输出分隔符,输出第1列和第2列

grep awk性能 grep awk -f_awk -f 分隔符 命令_11

(3)RS:以“:”为行输入分隔符,输出对应的行号和当前行内容。

  需要注意的是,两个红框中的内容,由于Jack和DEF、Alice和GHI之间没有“:”,所以在awk中被认作为同一行

grep awk性能 grep awk -f_分隔符_12

(4)ORS:以“---”为行输出分隔符

grep awk性能 grep awk -f_grep awk性能_13

(5)NF:当前行的字段数

  其中$NF表示的是最后一个字段的内容,$(NF-1)表示的是倒数第二个字段的内容

(6)NR:当前行号

(7)FNR:不同文件分别计数

grep awk性能 grep awk -f_awk -f 分隔符 命令_14

(8)FILENAME:显示当前行的文件名

grep awk性能 grep awk -f_awk -f 分隔符 命令_15

(9)ARGV:数组,保存的是命令行所给定的各参数

grep awk性能 grep awk -f_grep awk性能_16

(10)ARGC:保存的是ARGV数组的个数

grep awk性能 grep awk -f_数组_17

2. 自定义变量

(1)使用-v来自定义变量(在上第三节已介绍)

(2)在awk中直接定义

grep awk性能 grep awk -f_awk -f 分隔符 命令_18