一肮之、awk命令用法
? ? ? ? 在Linux中掉缺,awk 即 gawk , awk的二進制文件為gawk的鏈接文件;
? ?????? gawk - pattern scanning and processing language / 模式掃描及處理語言戈擒;
? ? ? ? 用法: gawk [options]? 'pattern{ACTION }'? FILE...
? ? ? ? 1眶明、options:? ? ?-F: 定義輸入字段分隔符,默認字符為空格;
? ? ? ? ? ? ? ? ? ? ? ? ? ?-v var=val? : 自定義變量峦甩;
? ? ? ?2赘来、常見的輸出分隔符:
? ? ? ? ? ? ? ? ? ? ? ? ? ? a.print? :
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?格式:? ? print item1,item2.....? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?注意: item之間用 逗號分割;item可以是字符串凯傲、數(shù)值犬辰;當前處理行的字段、變量或awk的表達式冰单;
? ? ? ? ? ? ? ? ? ? ? ? ? ? b.printf : 按照給定格式輸出幌缝;
? ? ? ? ? ? ? ? ? ? ? ? ? ? 格式:printf? FORMAT , item1,item2?
? ? ? ? ? ? ? ? ? ? ? ? ? ? 注意:FORMAT必須項;如果換行需要手動給出\n诫欠;每一個輸出的item都需要對應(yīng)FORMAT中的格式化符號涵卵;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 格式符有:
????????????????????????????????????????????????%d,%i : 顯示十進制的整數(shù);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %s : 顯示字符串荒叼;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %f : 顯示浮點數(shù)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %c : 顯示字符串的ASCII碼;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %e,%E : 科學計算法顯示;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?%u: 無符號整數(shù);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?%% : 顯示%本身轿偎;
? ? ? ? ? ? ? ? ? ? ? ? ? ? c. 修飾符,對輸出進行修飾
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#,[#] : 分別控制輸出item的寬度和精度(小數(shù))被廓;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-? : 控制輸出item 左對齊;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?+? :控制輸出item(數(shù)值) 的符號;
? ? ? ?3坏晦、awk變量:
? ? ? ? ? ? ? ? ? ? ? ? ? ? a. 內(nèi)置變量
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? FS :輸入字段分隔符
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? OFS: 輸出字段分隔符
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? NF : number of? fields /行字段數(shù) ;? ?$NF:最后一個字段的值;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? NR : number of record/ 行數(shù)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? FNR : file of number record /顯示每個文件的行數(shù)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? FILENAME : 顯示當前正在處理的文件的名字
? ? ? ? ? ? ? ? ? ? ? ? ? ? b.自定義變量
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-v? var_name=VALUE
????????????????eg1:?~]# awk -F: '/root\>/{print $1}' /etc/passwd
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? root
????????????????????????????????operator
????????????????????????????????oseroot
? ? ? ? ? ? ? ?eg2: ~]# awk -v FS=":" '/root/{print $1}' /etc/passwd
????????????????????????????????root
????????????????????????????????operator
????????????????????????????????oseroot
? ? ? ? ? ? ? ? eg3: 控制輸出item的方式? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? eg4:? 打印/etc/passwd 的 字段數(shù)及最后一個字段的值? ? ? ??
????????????????????~]# awk -F: '/root/{print NF,$NF}' /etc/passwd
????????????????????????????7 /bin/bash
? ? ? ? ? ? ? ? ? ? ? ? ? ? 7 /sbin/nologin
????????????????????????????7 /bin/bash
4嫁乘、pattern:AWK patterns may be one of the following:
? ? ? ? ? ? ? 空模式 : 匹配每一行
? ? ? ? ? ? ?/regular expression/ : 處理能夠匹配到的行
? ? ? ? ? ? ? relational expression :關(guān)系表達式昆婿,為真時才會被處理;
? ? ? ? ? ? ? pattern && pattern
? ? ? ? ? ? ? pattern || pattern
? ? ? ? ? ? ? pattern ? pattern : pattern
? ? ? ? ? ? ? (pattern)
? ? ? ? ? ? ? ! pattern
? ? ? ? ? ? ? /pattern1/, /pattern2/
? ? ?eg1:??~]# awk '/^root\>/{print}' /etc/passwd
????????????????root:x:0:0:root:/root:/bin/bash
? ? eg2:??~]# awk -F: '$3==0{print}' /etc/passwd
????????????????root:x:0:0:root:/root:/bin/bash
????eg3:??~]# awk -F: '$1~"^root"{print}' /etc/passwd
????????????????root:x:0:0:root:/root:/bin/bash
? ? eg4:?? ~]# awk -F: '/^root\>/,/^bin\>/{print}' /etc/passwd
????????????????root:x:0:0:root:/root:/bin/bash
????????????????bin:x:1:1:bin:/bin:/sbin/nologin
????eg5:??~]# awk -F: '(NR>=1&&NR<=2){print}' /etc/passwd
????????????????root:x:0:0:root:/root:/bin/bash
????????????????bin:x:1:1:bin:/bin:/sbin/nologin
? ? eg6:??~]# awk -F: '!(NR>=2){print}' /etc/passwd
????????????????root:x:0:0:root:/root:/bin/bash
二、awk函數(shù)用法
? ?? ? ? ? awk 函數(shù)包括內(nèi)置函數(shù)和自定義函數(shù)蜓斧,內(nèi)置函數(shù)比較常用;
? ? ? ? ? ?a.??rand() : Return a random number N, between 0 and 1, such that 0 ≤ N < 1
? ?????????? ~]# awk 'BEGIN{print rand()}'
????????????????0.237788
? ? ? ? ? b.length(string) : 顯示字符串的長度
? ?????????? ~]# awk -v tmp="helloworld" 'BEGIN{print length(tmp)}'
????????????????10
????????????~]# awk -F:? '/^root\>/{print length($1)}'? /etc/passwd
????????????????4
? ? ? ? c.??split(s, a [, r ] ])? : 以r為分隔符分割s, 并將分割后的結(jié)果保存在數(shù)組a 中 仓蛆;
? ? ? ? ? ? ##統(tǒng)計外部IP連接的個數(shù)
? ??????????~]# netstat -tan | awk '/tcp\>/{split($5,ip,":");count[ip[1]]++}END{for (i in count){print i,count[i]}}'
????????????0.0.0.0 7
? ? ? ? ? ?10.14.5.107 1