awk小結

awk工做原理介紹正則表達式

awk實際是一種編程語言,咱們使用的是的GUN版本,主要使用其強大的分割,過濾功能,awk實際也是對文件進行逐行處理
awk工做狀態分爲如下三種
GEGIN{}     {}      END{}
行處理前    行處理中    行處理後
++++++小示例++++++++
awk 'BEGIN{ print 1/2 } { print "ok" } END{ print "------------------"}' /etc/passwd
即爲行處理前打印一個1/2 行處理時輸出ok 處理結束打印------

awk命令格式:編程

awk 'pattren' filename    示例:awk '/root/' passwd
awk '{action}' filename   示例:awk -F '{ print $1 }' passwd
awk 'pattren {action}' filename  示例: awk -F ':' '/root/{ print $1}'  / /中間的內容爲正則表達式
又例如添加條件判斷的
df | grep '/' | awk '$4>1000000{ print $6}'

awk的內部變量bash

head -10 /etc/passwd > passwd        #取/etc/passwd前10行舉例
[root@localhost ~]# awk '{print $0}' passwd       #$0爲所有參數,默認以回車爲分隔符,因此原格式打印全部內容
[root@localhost ~]# awk '{print NR}' passwd     #total number record 全部行號,按順序排列的
[root@localhost ~]# awk '{print FNR}' passwd /etc/passwd    #number record of file 多個文件的話,分別顯示各自文件的行號
[root@localhost ~]# awk -F":" '{print NF}' passwd        #NF爲指定冒號爲分隔符,一行一共有多少字段
[root@localhost ~]# awk -F":" '{print NF,$NF}' passwd   #$NF爲最後一個字段
[root@localhost ~]# awk 'BEGIN{FS=":"} {print $1}' passwd   #FS爲分隔符,默認以空格爲分隔  
[root@localhost ~]# awk 'BEGIN{FS=":";OFS="+++++"} {print $1,$2}' passwd  #行處理前以冒號爲分隔符,輸出分隔符爲+++++,打印第1第2個參數,第一與第二參數會以+++++相連,打印結果以下
root+++++x
bin+++++x
daemon+++++x
adm+++++x
lp+++++x

[root@localhost ~]# awk 'BEGIN{RS=":"} {print $0}' passwd    #本來以回車爲默認換行輸出分隔符,如今看到冒號則換行。打印效果以下
root
x
0
0
root
/root
/bin/bash
.......
[root@localhost ~]# awk 'BEGIN{FS=":";ORS="++++"} { print $1}' passwd   #默認以回車輸出排序,如今以++++做爲輸出排序。打印效果以下:
root====bin====daemon====adm====lp====sync====shutdown====halt====mail====operator====

格式化輸出:編程語言

print函數
# date + %F | awk -F":" '{ print "month: "$1 "\nyear: "$2}'
# awk -F":" '{ print "username: "$1 "\tuid: "$3}' passwd  #能夠很清晰看出格式對不齊

printf函數ide

# awk -F":" '{ printf "%-15s %-10s %-15s\n",$1,$2,$3}' passwd   #定義了每一個變量佔用位置多少
# awk -F":" '{ printf "username: %-15s passx: %-10s uid: %-10s",$1,$2,$3}' passwd  #能夠在定義位置空間前面自由添加字符
%s 字符類型 %15s  右對齊佔15字符
%d 數值類型 %15d  右對齊佔15字符
-表示左對齊,默認右對齊
%-15s   意思爲左對齊佔15字符
\n表明換行 \t表明製表符(tab)

awk模式和動做:函數

任何awk語句都由模式和動做組成。模式部分決定動做語句的合適觸發及觸發條件。處理即對數據進行的操做。
模式能夠是:正則表達式
匹配記錄(整行)
# awk '/^root/' passwd
# awk '$0 ~/^root/' passwd
# awk '!/^root/' passwd
# awk '$0 !~ /^root/'

匹配字段: 匹配操做符(~!~)
# awk -F":" '$1 ~ /root/' passwd
# awk -F":" '$NF !~ /bash$/' passwd

關係運算符ui

運算符          含義            示例
<               小於            $x<100
>               大於            $x>100
<=              小於等於        $y<=50
>=              大於等於        $y>=50
==              等於            x=y
!=              不等於          x!=y

# awk -F":" '$3 == 0' passwd
# awk -F":" '$3 < 10' passwd
# awk -F":" '$7 == "/bin/bash"' passwd
# awk -F":" '$1 == "alice"' passwd     #這裏的關係運算符,匹配字符須要加雙引號,詳細匹配內容
# awk -F":" '$1 ~ /root/' passwd
# awk -F":" '$ !~ /root/' passwd
# df | grep '/' | awk '$4>250000'

條件表達式code

# awk -F":" '{ if($3 > 100) { print $1 } }' passwd

awk是一門編程語言,用法不少,會在後面的一些腳本中詳細的去使用。也沒必要深究,GUN版的,咱們主要仍是用到其強大的分割能力,有興趣的能夠深刻了解~排序

相關文章
相關標籤/搜索