shell脚本--文本处理三剑客之awk内置变量

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
原创文章 33 获赞 38 访问量 2万+

猜你喜欢

转载自blog.csdn.net/ChaoLi_Chen/article/details/105754029