awk整理

awk 编程语言
-抓取数据
-不能编辑文本
-针对细节文本搜索

一般格式

awk ‘{print xx }’ file
-xx:
$0 输出当行的所有内容
$1 文本第一个数据
$2 文本第二个数据

默认是使用空格做分隔符

[root@localhost ~]# cat test02
111 222 444
222 333 555
333 444 666
222 333 555
[root@localhost ~]# awk  '{print $0}' test02
111 222 444
222 333 555
333 444 666
222 333 555
[root@localhost ~]# awk  '{print $1}' test02
111
222
333
222

修改分隔符

awk -F选项

[root@localhost ~]# cat test01
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
[root@localhost ~]# awk -F : '{print $1}' test01
root
bin
daemon
adm
lp

多个符号作为分隔符 使用[ ]作为集合 例如:-F [: /]


内置函数

awk是进行逐行操作
有一些内置函数帮助我们输出
-NR 输出行数
-NF 输出列数

[root@localhost ~]# awk  'NR==4{print"这一行有"NF"个数据" }' test02
这一行有3个数据
[root@localhost ~]# awk  '{print $0 "\t这是第"NR"行\t这一行有"NF"个数据" }' test02
111 222 444     这是第1行       这一行有3个数据
222 333 555     这是第2行       这一行有3个数据
333 444 666     这是第3行       这一行有3个数据
222 333 555     这是第4行       这一行有3个数据

-包含 ~
-不包含 !~

[root@localhost ~]# awk '$1~/111/'  test02
111 222 444
[root@localhost ~]# awk '$0!~/nologin$/'  test01
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# awk  '$0~/nologin$/'  test01
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

制定执行任务

格式
awk [option] BEGIN{}{}END{} file
第一个花括号是开始指定的任务
第二个花括号是每逐行操作执行完后执行的任务
END后值逐行操作完会执行的语句


例 列出哪些服务是拒绝用户登录的

[root@localhost ~]# awk -F : 'BEGIN{print "USER\t\tUID\tSTATUS"}/nologin$/{print $1"\t\t"$3"\t"$7}END{print ""}' /etc/passwd
USER            UID     STATUS
bin             1       /sbin/nologin
daemon          2       /sbin/nologin
adm             3       /sbin/nologin
lp              4       /sbin/nologin
mail            8       /sbin/nologin

中间使用/nologin$/ 做条件筛选出无法登录系统的用户
适当使用制表符\t让表格美观些

可以嵌套for循环输出
也可以创建数组【】 下标同其他语言
使用字符以及字符串做下标 方便做数据统计

[root@localhost ~]# cat test03
1.1.1.1
2.2.2.2
1.1.1.1
3.3.3.3
2.2.2.2
5.5.5.5
[root@localhost ~]# awk '{a[$1]=a[$i]+1}END{for(i in a){print i, a[i]}}'  test03
1.1.1.1 2
2.2.2.2 2
3.3.3.3 1
5.5.5.5 1

其中就使用a[1.1.1.1] 作为标识存储数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值