wak简介,wak是一个文本处理工具,通常用于处理数据并生成结果报告
awk的命名是他的创始人AIfred Aho ,Peter Weinberger和Brian Kernighan的姓氏的首字母组成的
语法格式
第一种形式对文件操作
awk 'BEGIN{}pattern{commands}END{}' file_name
第二种形式对输出处理
standard output | awk 'BEGIN{}pattern{commands}END{}'
语法格式说明
语法格式 解释
BEGIN{} 正式处理数据之前执行
pattern 匹配模式
{commands} 处理命令,可多行
END{} 处理完成所有匹配数据后执行
awk的内置变量 内置变量之间 用 ;(分号进行分割)
内置变量 含义
$0 整行内容
$1-$n 当前行的字段个数,也就是有多少列
NF 当前行的行号 ,从1开始计数
FNR 多文件处理时,每个文件行号单独计数,都是从0开始
FS 输入字段分隔符,不指定默认以空格或tab建分割
RS 输入分行分割符,默认回车换行
OFS 输出字段分隔符,默认为空格
ORS 输出行分隔符,默认为回车换行
FILENAME 当前输入的文件名字
ARGC 命令行参数个数
ARGV 命令行参数数组
$0输出全行
$ awk '{print $0}' passwd
FS 以分隔符 : 分割字符并输出 第一个字段
$ awk 'BEGIN{FS=":"}{print $1}' passwd
结果
root
.....
NF输出打印的当前字段
$ awk '{print NF}' passwd
1
NR打印当前行号 NR不会重新计算
打印行号
awk '{print NR}' passswd
NR打印当前行号 份文件 NR不会重新计算
打印行号份文件不会重新计算
awk '{print NR}' list /etc/passwd
FNR打印当前行号 FRN 会对份文件行号进行重新计算
打印行号份文件不会重新计算
awk '{print FNR}' list /etc/passwd
RS行分隔符
awk 'BEGIN{FS=":";RS="---"}{print $2}' passwd
RS行分隔符 指定---为分隔符并进行 $0全输出
awk 'BEGIN{RS="---"}{print $0}' passwd
输出行分隔符 :ORS="&" print默认输出行分隔符是 换行符
awk 'BEGIN{RS="---";FS="|";ORS="&"}{print $3}' list
输出分隔符 :OFS="&" print默认输出分隔符是 空格
awk 'BEGIN{RS="---";FS="|";ORS="&";OFS=":"}{print $1,$3}' list
FILENAME输出文件名字 文件有多少行输出多少次
$ awk '{print FILENAME}' passwd
passwd
当前行处理参数
awk '{print ARGC}' passwd
2
print $NF NF的变量代表的是字段的个数
$ awk 'BEGIN{FS=":"}{print $NF}' passwd
/bin/bash