博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
awk的基本⽤法
阅读量:6981 次
发布时间:2019-06-27

本文共 1902 字,大约阅读时间需要 6 分钟。

awk的基本⽤法

awk是报告⽣成器,格式化⽂本输出,有多种版本。centos中的是gawk即GNU awk版本。

awk⼯作原理:

第⼀步:执⾏BEGIN{action;...}语句块中的语句。
第⼆步:从⽂件或标准输⼊(stdin)读取⼀⾏,然后执⾏pattern{action;...}语句块,它逐⾏扫描⽂
件,从第⼀⾏到最后⼀⾏重复这个过程,直到⽂件全部被读取完毕。
第三步:当读⾄输⼊流末尾时,执⾏END{action;...}语句块。
BEGIN语句块在awk开始从输⼊流中读取⾏之前被执⾏,这是⼀个可选的语句块,⽐如变量初始化、打
印输出表格的表头等语句通常可写咋BEGIN语句块中。
END语句块在awk从输⼊流中读完所有的⾏之后被执⾏,⽐如打印所有⾏的分析结果这类信息汇总都是
在END语句块中完成,它也是⼀个可选语句块。
pattern语句块中的通⽤命令是最重要的部分,也是可选的。如果没有提供pattern语句块,则默认执⾏
{print},即打印每⼀个读取到的⾏,awk读取的每⼀⾏都会执⾏该语句块。
print格式:print item1, item2, ...

注意:

逗号分隔符;
输出的各item可以是字符串,也可是数值;当前记录的字段、变量或awk的表达式;
如省略item,相当于print $0。

awk基本⽤法

awk [options] 'program' var=value file ...

awk [options] -f programfile var=value file ...
awk [options] 'BEGIN{ action;...} pattern{ action;... } END{ action;... }' file
...
awk程序通常由:BEGIN语句块、能够使⽤模式匹配的通⽤语句块、END语句块等三部分组成。
program通常是被单引号或双引号括起来。
选项:
-F:指明输⼊时⽤到的字段分隔符;
-v var=value:⾃定义变量。

基本格式:

awk [options] 'program' file
program:表⽰为pattern{action statements;...}
pattern:表⽰部分决定动作语句何时触发及触发事件BEGIN、END;
action statements:表⽰对数据进⾏处理,放置{}内指明print、printf。
分隔符、域和记录:
awk执⾏时,由分隔符的字段(域)标记$1,$2...$n称为域标识。$0为所有域,注意:和shell中变量
$符含义不同;
⽂件的每⼀⾏称为记录;
省略action,则默认执⾏print $0的操作。

[root@magedu ~]# head -10 /etc/passwd > awktest.txt

解释:生成需要的测试数据
【例1】awk省略action,默认执⾏print $0
[root@CentOS7 17chapter]#awk '{print}' awktest.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync

例2】指定:(冒号)为分隔符,打印每⾏记录的第⼀个字段即输出$1

awk -F: '{print $1}' awktest.txt

root
bin
daemon
adm
lp
sync

例3】取出磁盘使⽤率

[root@localhost ~]# df |grep "^/dev"|awk '{print $5}'
24%
19%
100%

awk的变量⽤法

内置变量:
FS:输⼊⾃动分隔符,默认为空⽩字符;
OFS:输出⾃动分隔符,默认为空⽩字符;
RS:输⼊记录分隔符,指定输⼊时的换⾏符,原换⾏符仍有效;
ORS:输出记录分隔符,输出时⽤指定符号代替换⾏符;
NF:字段数量;
NR:⾏号;(以记录分隔符为标准)
FNR:各⽂件分别计数,记录号;
FILENAME:当前⽂件名;
ARGC:命令⾏参数的个数;

转载于:https://blog.51cto.com/14231434/2398170

你可能感兴趣的文章
【java】 虹软ArcFace 2.0 人脸信息识别(年龄、性别)
查看>>
A Tour of Go Slicing slices
查看>>
Log4j 配置文件(log4j.properties)的所在路径问题(转)
查看>>
Python中用format函数格式化字符串的用法
查看>>
Java集合--Map总结
查看>>
loadrunner两个报错Error -27492、Error -27778 互斥的问题
查看>>
Context.getExternalFilesDir()和Context.getExternalCacheDir()方法
查看>>
MySQL metadata lock
查看>>
【转】Netty系列之Netty 服务端创建
查看>>
了解自我
查看>>
Agilent RF fundamentals (7) Oscillator characterization
查看>>
页面超时处理
查看>>
前五章的综合(查漏补缺续)一个字一个字读,便于您的理解程度
查看>>
面向对象的基本认知
查看>>
List创建,添加,读取,遍历,修改,移除等方法
查看>>
Maven构建springMVC+spring+MyBatis项目
查看>>
猴子选大王
查看>>
简单水题 POJ 2291 Rotten Ropes
查看>>
3249 搭积木
查看>>
POJ2749:Building roads——题解
查看>>