length函数返回字符串的长度

# echo "xiaoming235" | awk '{print length}'
11
# awk -F ":" 'length($NF)>13 {print $0}' /etc/passwd
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown


gsub使得在所有正则表达式被匹配的时候都发生替换

0001|20081223efskjfdj|EREADFASDLKJCV
0002|20081208djfksdaa|JDKFJALSDJFsddf
0003|20081208efskjfdj|EREADFASDLKJCV
0004|20081211djfksdaa1234|JDKFJALSDJFsddf
以'|'为分隔, 现要将第二个域字母前的数字去掉,其他地方都不变,
cat data.test | awk -F "|" 'gsub(/[0-9]+/,"",$2)' | sed 's@ @|@'g
cat data.test | awk -F "|" 'BEGIN{ OFS="|"} {gsub(/[0-9]+/,"",$2);print $0}'

sub匹配第一次出现的符合模式的字符串,相当于 sed 's//' 。

gsub匹配所有的符合模式的字符串,相当于 sed 's//g' 。


split函数把一个字符串分割为段保存到数组当中

split(string,array_name,filed separator)
# echo "11:22:33" | awk '{split($0,a,":");{printf("%d\n%d\n%d\n", a[1],a[2],a[3])}}'
11
22
33


计算2013年一月每人工资数
Tom
    2012-12-11          5       3000
John    2013-01-13          4       1000
vivi    2013-01-18           4       2800
Tom     2013-01-20           3       2500
John    2013-01-28         6       3500
awk '{split($2,a,"-");if(a[2]==01){b[$1]+=$NF}}END{for(A in b){print A,b[A]}}' test.t


查看TCP连接状态

# netstat -tuan | awk '/^tcp/{listen[$NF]++}END{for(A in listen){ print A,listen[A]}}'

ESTABLISHED 2

LISTEN 4


substr截取字符串

substr(s,p)字符串s中从p开始的部分

substr(s,p,n)字符串s中p开始且p后长度为n的部分

# echo "xiaoming235" | awk '{print substr($0,3,2)}'
ao
# echo "xiaoming235" | awk '{print substr($0,3)}'
aoming235