awk详解(一)

awk介绍

awk:报告生成器,格式化文本输出
有多种版本:New awk(nawk),GNU awk(gawk)
gawk:模式扫描和处理语言
基本用法:
    awk [options] 'program' var=value file....
    awk [options] -f programfile var=value file...
    awk [options] 'BEGIN{action;...}pattern{action;...}END{action;...}' file...
    awk程序可由:BEGIN语句块、能够使用模式匹配的通用语句块、EDN语句块,共三部分组成
    program通常是被放在单引号中

选项:
    -F "分隔符"        指明输入时用到的字符分隔符
    -v var=value     变量赋值

基本格式:awk [options] 'program' file...
Program:pattern{action statements;...}
pattern和action
    pattern部分决定动作语句何时触发及触发条件
        BEGIN,END
    action statements对数据进行处理,放在{}内指明
        print,printf
分隔符、域和记录
    awk执行时,由分隔符分隔的字段(域)标记$1,$2...$n称为域标识。$0为所有域,注意:此时和shell变量$符号含义不同
    文件的每一行称为记录
    省略action,则默认执行print $0的操作
    
awk工作原理
第一步:执行BEGIN{action;...}语句块中的语句
第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{action;...}语句块,它转行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。
第三步:当读至输入流末尾时,执行END{action;...}语句块
BEGIN语句块在awk开始从输入流中读取行之前被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中
END语句块在awk从输入流中读取完所有的行之后即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块
pattern语句块中的通用命令是最重要的部分,也是可选的。如果没有提供pattern语句块,则默认执行{print},即打印每一个读取的行,awk读取的每一行都会执行该语句块

基本用法

print格式:print item1,item2,...
要点:
    (1)逗号分隔符
    (2)输出item可以字符串,也可是数值;当前记录的字段、变量或者awk表达式
    (3)如省略item,相当于print $0
示例:
awk  '{print "hello ,awk"}'
awk   -F:  '{print}'    /etc/passwd
awk   -F:  '{print "wang"}'   /etc/passwd
awk   -F:   '{print $1}'    /etc/passwd
awk   -F:   '{print $0}'   /etc/passwd
awk   -F:   '{print $1"\t" $3}'   /etc/passwd
grep "^UUID"  /etc/fstab | awk  '{print $2,$4}' 

awk变量

变量:内置和自定义变量
FS:输入字段分隔符,默认为空白字符
    awk -v FS=":"  '{print $1,FS,$3}'  /etc/passwd
    awk -F:    '{print $1,$3,$7}'    /etc/passwd
OFS:输出字段分隔符,默认为空白字符
    awk -v FS=':' -v OFS=':' '{print $1,$3.$7}' /etc/passwd
RS:输入记录分隔符,指定输入时的换行符
    awk -v RS=' '     '{print}'     /etc/passwd
ORS:输出记录分隔符,输出时指定符号代替换行符
    awk -v RS=' ' -v ORS='###' '{print}' /etc/passwd
NF:字段数量
    awk    -F:    '{print NF}'    /etc/passwd    引用变量时,变量前不需加$
NR:记录号(行号)
    awk   '{print NR}'   /etc/fstab; awk END  '{print NR}'   /etc/fstab
FNR:各文件分别计数,记录号
    awk '{print  FNR}' /etc/fstab /etc/inittab
FILENAME:当前文件名
    awk '{print FILENAME} ' /etc/fstab
ARGC:命令行参数的个数
    awk '{print ARGC}' /etc/fstab /etc/inittab
ARGV:数组,保存的是命令行所给定的个参数
    awk 'BEGIN{print ARGV[0]}' /etc/fstab /etc/inittab
    awk 'BEGIN{print ARGV[1]}' /etc/fstab /etc/inittab
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值