预计阅读时间25分钟
今日目标
熟悉awk的命令行模式基本语法结构
熟悉awk的相关内部变量
熟悉awk常用的打印函数print
能够在awk中匹配正则表达式打印相关的行
一、awk介绍
1. awk概述
awk是一种编程语言,主要用于在linux/unix下对文本和数据进行处理,是linux/unix下的一个工具。数据可以来自标准输入、一个或多个文件,或其它命令的输出。
awk的处理文本和数据的方式:逐行扫描文件,默认从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。
awk分别代表其作者姓氏的第一个字母。因为它的作者是三个人,分别是Alfred Aho、Brian Kernighan、Peter Weinberger。
gawk是awk的GNU版本,它提供了Bell实验室和GNU的一些扩展。
下面介绍的awk是以GNU的gawk为例的,在linux系统中已把awk链接到gawk,所以下面全部以awk进行介绍。
2. awk能干啥?
awk用来处理文件和数据的,是类unix下的一个工具,也是一种编程语言
可以用来统计数据,比如网站的访问量,访问的IP量等等
支持条件判断,支持for和while循环
二、awk使用方式
1. 命令行模式使用
(一) 语法结构
'命令部分' 文件名
(二)常用选项介绍
-F 定义字段分割符号,默认的分隔符是空格
-v 定义变量并赋值
(三) '命名部分说明'
正则表达式,地址定位
'/root/{awk语句}' sed中:
{awk语句1;awk语句2;...}
'{print $0;print $1}' sed中:
BEGIN...END....
'BEGIN{awk语句};{处理中};END{awk语句}'
2. 脚本模式使用
(一) 脚本编写
#!/bin/awk -f 定义魔法字符
(二) 脚本执行
1:
三、 awk内部相关变量
变量 | 变量说明 | 备注 |
---|---|---|
$0 | 当前处理行的所有记录 | |
$1,$2,$3...$n | 文件中每行以间隔符号分割的不同字段 | awk -F: '{print $1,$3}' |
NF | 当前记录的字段数(列数) | awk -F: '{print NF}' |
$NF | 最后一列 | $(NF-1)表示倒数第二列 |
FNR/NR | 行号 | |
FS | 定义间隔符 | 'BEGIN{FS=":"};{print $1,$3}' |
OFS | 定义输出字段分隔符,默认空格 | ' |