Linux awk

1 awk格式

2 内置参数

2-1

  1. $0: 当前行
  2. $1: 每行第一个字段
  3. $2: 每行第二个字段 $3,$4..
  4. F: 分隔符 默认空格。

打印每行第一个字段(passwd字段是用:隔开的):正则表达式

[root@iZryxshkbkz2x2Z ~]# awk -F ':' '{print $1}' passwd 
	root
	bin

打印每行第一个和第二个字段,并用空格隔开:bash

提示: 用逗号或" "服务器

[root@iZryxshkbkz2x2Z ~]# awk -F ':' '{print $1,$2}' passwd
或
[root@iZryxshkbkz2x2Z ~]# awk -F ':' '{print $1" "$2}' passwd
  1. NR: 每行的记录号ui

  2. NF: 字段数量变量code

  3. FILENAME: 正在处理的文件名blog

    [root@iZryxshkbkz2x2Z ~]#  awk -F ':' '{print NF,NR}' passwd
    7 1
    7 2
    7 3
    [root@iZryxshkbkz2x2Z ~]# awk -F ':' '{print FILENAME}' passwd # 每行都显示passwd
    passwd
    passwd
    passwd

2-2 案例

1 从PASSWD 打印出uid 大于10 的行:awk

[root@iZryxshkbkz2x2Z ~]# awk -F ':' '{if($3>10)print "NR :"NR,"Uid: " $3}' passwd
	NR :11 Uid: 11
	NR :12 Uid: 12
	NR :13 Uid: 13
	NR :14 Uid: 14
	NR :15 Uid: 99
	NR :16 Uid: 69
	NR :17 Uid: 499
	NR :18 Uid: 89
	NR :19 Uid: 74

2 从服务器log 中找出error 发生的日期(使用正则):变量

[root@iZryxshkbkz2x2Z ~]#  awk '/Error/{print $1}' fresh.log

3 awk中的逻辑表达式

案例1 使用正则表达式:扩展

[root@iZryxshkbkz2x2Z ~]#  awk  -F ':' '$1~/^root/' passwd  #必定要加 ~
	root:x:0:0:root:/root:/bin/bash

案例2: 从passwd 中取出不以 ‘r’ 开头的行数和用户名im

[root@iZryxshkbkz2x2Z ~]# awk -F ':' '$1!~/^r/{print "NR: "NR,"User: "$1}' passwd 
	NR: 2 User: bin
	NR: 3 User: daemon
	NR: 4 User: adm

案例3:passwd 中UId 大于10:

[root@iZryxshkbkz2x2Z ~]# awk -F ':' '$3>10{print "NR: "NR,"Uid: ",$3}' passwd 
	NR: 11 Uid:  11
	NR: 12 Uid:  12
	NR: 13 Uid:  13

4 awk 扩展格式

案例: 从passwd中,打印出行号,Uid制表

[root@iZryxshkbkz2x2Z ~]# awk -F ':' 'BEGIN{print "NR Uid"}{print NR,$3}END{print "======FILENAME==="}' passwd 
	NR Uid
	1 0
	2 1
	3 2
	4 3
	5 4

awk 案例

相关文章
相关标签/搜索