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 案例

相關文章
相關標籤/搜索