【无标题】

一.

1. awk命令简介
awk是专门为文本处理设计的编.程语言,也是一个应用程序,几乎所有Linux发行版本都自带这个程序。我们通常用它进行数据扫描、过滤、统计汇总工作。

awk是一种强大的编辑工具,比较倾向于一行当中分成数个字段来处理,因为awk相当适合小型的文本数据。
awk 比较倾向于将一行分成多个字段然后再进行处理,且默认情况下字段的分隔符为空格或 tab 键。awk 执行结果可以通过 print 的功能将字段数据打印显示。
awk工作原理

逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。
在使用awk命令的过程中,可以使用逻辑操作符“&&”表示“与”、“||”表示“或”、“!”表示“非”;还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方。
2. awk命令格式
它与grep、sed命令一样都是以行为单位读取文本的,默认以空格或Tab键为分隔符,将分割所得的各个字段保存到内建变量中供后续使用。

命令格式如下:

awk "[选项1] {操作1;操作2} [选项2] {操作3;操作4} ..." 文件名
awk -f 脚本文件 文件名

-f 脚本文件, --file=脚本文件
-F fs, --field-separator=fs
-v var=val, --assign=var=val
-b, --characters-as-bytes
-c, --traditional
-C, --copyright
-d[文件], --dump-variables[=文件]
-D[文件], --debug[=文件]
-e '程序文本', --source='程序文本'
-E 文件, --exec=文件
-g, --gen-pot
-h, --help
-i 包含文件, --include=包含文件
-I, --trace
-l 库, --load=库
-L[fatal|invalid|no-ext], --lint[=fatal|invalid|no-ext]
-M, --bignum
-N, --use-lc-numeric
-n, --non-decimal-data
-o[文件], --pretty-print[=文件]
-O, --optimize
-p[文件], --profile[=文件]
-P, --posix
-r, --re-interval
-s, --no-optimize
-S, --sandbox
-t, --lint-old
-V, --version

二.

模式

用来指定要处理的行。
模式可以是以下任意一个:

/正则表达式/:使用ERE。
关系表达式:使用运算符操作,可以是字符串或数字的比较测试。
包含表达式:使用运算符~(包含)和!~(不包含)。
BEGIN:如果模式是BEGIN,说明后面的操作只在程序开始时执行一次。
END:如果模式是END,说明后面的操作只在程序结束时执行一次。
模式1, 模式2:从匹配模式1的行到匹配模式2的行(包含该行)。
省略:表示处理所有行。

内置变量

变量 描述
$n 当前记录的第n个字段,字段间由FS分隔,n从1开始
$0 完整的输入记录
ARGC 命令行参数的数目
ARGIND 命令行中当前文件的位置(从0开始算)
ARGV 包含命令行参数的数组
CONVFMT 数字转换格式(默认值为%.6g)ENVIRON环境变量关联数组
ERRNO 最后一个系统错误的描述
FIELDWIDTHS 字段宽度列表(用空格键分隔)
FILENAME 当前文件名
FNR 各文件分别计数的行号
FS 字段分隔符(默认是任何空格)
IGNORECASE 如果为真,则进行忽略大小写的匹配
NF 一条记录的字段的数目
NR 已经读出的记录数,就是行号,从1开始
OFMT 数字的输出格式(默认值是%.6g)
OFS 输出字段分隔符,默认值与输入字段分隔符一致。
ORS 输出记录分隔符(默认值是一个换行符)
RLENGTH match函数所匹配的字符串的长度
RS 记录分隔符(默认是一个换行符)
RSTART 由match函数所匹配的字符串的第一个位置
SUBSEP 数组下标分隔符(默认值是/034)


三.

示例用法

1. AWK的打印控制 

我们可以使用AWK对打印输出进行控制。例如,我们可以使用以下命令在文件中查找所有以“a”开头的行,并输出该行以及该行的行号:

`awk '/^a/{print $0, NR}' file`

这里,“/^a/”代表要匹配的字符串以“a”开头,“{print $0, NR}”则表示输出匹配到的这一行和行号。

2. AWK的数组处理 

`awk '{
    for(i=1; i<=NF; i++) { 
        count[$i]++
    }
}
END {
    for(j in count) {
        print j, count[j]
    }
}' file | sort -k2 -r | head -3`

3.AWK的模式匹配和替换 

AWK还包括一些用于模式匹配和替换的内置函数。例如,我们可以使用gsub函数来替换文件中所有的空格为下划线:

`awk '{gsub(/ /,"_"); print}' file`

你可能感兴趣的:(linux,运维,服务器)