一、AWK簡介
awk是行處理器: 相比較屏幕處理的優(yōu)點,在處理龐大文件時不會出現(xiàn)內(nèi)存溢出或是處理緩慢的問題,通常用來格式化文本信息
awk處理過程: 依次對每一行進行處理,然后輸出
二、常用命令選項
- -
F fsfs指定輸入分隔符,fs可以是字符串或正則表達式,如-F:- -v var=value 賦值一個用戶定義變量,將外部變量傳遞給awk
- -f scripfile 從腳本文件中讀取awk命令
- -m[fr] val 對val值設(shè)置內(nèi)在限制,-mf選項限制分配給val的最大塊數(shù)目;-mr選項限制記錄的最大數(shù)目。這兩個功能是Bell實驗室版awk的擴展功能,在標(biāo)準(zhǔn)awk中不適用。
三、使用
- awk 按照默認的
空格或者tab分割- 變量
NF表示當(dāng)前行有多少個字段,因此$NF就代表最后一個字段。$(NF-1)代表倒數(shù)第二個字段。
#按照默認的空格或者tab分割
Cat -n a.log|awk ‘{print $1}’
#按照自定義的字符分割,使用-F 后面單引號里面寫入自定義的內(nèi)容
Cat -n a.log|awk -F ‘:’ ‘{print $1}’
#增加開始結(jié)束行的控制
Cat -n a.log|awk ‘BEGIN{print “開始”} {if(“”!=$1)print$2} END{print “結(jié)束”}’
#統(tǒng)計文件中的行數(shù)
awk 'END{ print NR }' filename
awk內(nèi)置變量
ARGC命令行參數(shù)個數(shù)ARGV命令行參數(shù)排列ENVIRON支持隊列中系統(tǒng)環(huán)境變量的使用FILENAMEawk瀏覽的文件名FNR瀏覽文件的記錄數(shù)FS設(shè)置輸入域分隔符,等價于命令行 -F選項NF瀏覽記錄的域的個數(shù)NR已讀的記錄數(shù)OFS輸出域分隔符ORS輸出記錄分隔符RS控制記錄分隔符
#自定義變量 統(tǒng)計count
awk 'BEGIN {count=0;print "[start]user count is ", count} {count=count+1;print $0;} END{print "[end]user count is ", count}' /etc/passwd
#統(tǒng)計某個文件夾下的文件占用的字節(jié)數(shù)
ls -l |awk 'BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ", size}’
#如果以M為單位顯示:
ls -l |awk 'BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ", size/1024/1024,"M"}'
#統(tǒng)計某個文件夾下的文件占用的字節(jié)數(shù),過濾4096大小的文件(一般都是文件夾):
ls -l |awk 'BEGIN {size=0;print "[start]size is ", size} {if($5!=4096){size=size+$5;}} END{print "[end]size is ", size/1024/1024,"M"}'