只處理使用者ID爲奇數的行,並列印使用者名稱和uid號
awk -F: '$3%2==1{print $1 $3}' /etc/passwd #關係表達式考察
顯示系統的普通使用者,並列印使用者名稱和ID
awk -F: '$3>=1000{print $1 $3}' /etc/passwd #關係表達式考察
顯示系統的普通使用者,並列印使用者名稱和ID
awk -F: '$7~/\/bin\/bash$/{print $1,$3}' /etc/passwd #~指的是 正則於
統計普通使用者的個數
awk -F: '$3>=1000{++count}END{print count}' /etc/passwd #模式考察
統計文字的總行數
END{print NR} #num of record #模式考察還有記錄內建變數NR
顯示檔名
END{print FILENAME} #不能在過程處理中輸出
顯示UID爲1002使用者的相關資訊
awk -F: 'if($3==1002)system("id $1")' /etc/passwd #判斷語句考察
利用awk模擬tail -l
print $0 #輸出整行
統計tcp的鏈接數
netstat -ant|awk '/^tcp/{++temp[$NF]}END{for (i in temp) print "temp[",i,"]=",temp[i]}' #NF :number of field,每一行最後一個欄位數
分別統計不同ip的tcp連線
netstat -ant |
awk '/^tcp/
{
n=split($(NF-1),array,":"); #按照:劃分,出現結果 兩個欄位和四個欄位 兩種情況
if(n<=2)
++S[array[(1)]];
else
++S[array[(4)]];
++s[$NF];++N
}
END {
for(a in S){
printf("%-20s %s\n", a, S[a]); #向左對齊佔20個位元組
++I}c
printf("%-20s %s\n","TOTAL_IP",I);
for(a in s)
printf("%-20s %s\n",a, s[a]);
printf("%-20s %s\n","TOTAL_LINK",N);
}
'
合併兩個檔案的輸出
```c
第一種解法: #FNR每次讀取一個檔案重新計數
awk 'NR==FNR{name[$1]=$2}NR!=FNR{$2=name[$1];print $0}‘ test2 test2
第二種解法:
merge.awk
{
if(NF==2){
temp1[$1]=$2
}
else if(NF==5){
temp2[$1]=$3
temp3[$1]=$4
temp4[$1]=$5
}
}
END{
for (i in temp1){
printf"%-5s%-6s%-4s%-4s%-4s\n ",i,temp1[i],temp2[i],temp3[i],temp4[i];
}
}
```
輸出成績表
[root@ ~/test 01:05:51]#cat test.awk
BEGIN{
printf "LNO. Name No. Math Eng Com Total\n"
printf "----------------------------------------\n"
math=0;eng=0;com=0;total=0;
}
{
math+=$3;eng+=$4;com+=$5;total+=$3+$4+$5;
printf "%-7s%-7s%-5s%-6s%-5s%-5s%-5s\n", NR,$1,$2,$3,$4,$5,$3+$4+$5;
}
END{
printf "----------------------------------------\n"
printf "%-19s%-6s%-5s%-5s%-5s\n", "Total:",math,eng,com,total;
printf "%-19s%-6.1f%-5.1f%-5.1f%-5.1f\n","Avg:",math/NR,eng/NR,com/NR,total/NR;
}
[root@ ~/test 01:05:51]#awk -f test.awk test
某產品的CDN頻寬運營成本迅猛增漲,其頻寬主要由各種型別的圖片組成,爲了對某產品的圖片流量頻寬進行優化,現需要對該產品的圖片和號碼特性做一些分析,已有的日誌檔案test.log供分析使用,格式是:
號碼|請求大小|請求id
----------------------------------
001|100|abc.gif
002|80|abd.jpg
003|150|abe.gif
001|60|abf.gif
003|30|abg.jpg
-----------------------------------
其中帶有gif表示是gif圖片的請求,帶有jpg表示是jpg圖片的請求,請使用(python/shell/awk/sort)編寫程式實現如下分析思路(1,2爲中間步驟,可以只輸出3,4結果)
找出所有gif圖片請求的所有號碼
awk -F"|" '/gif$/{print $1 | "sort -u" }' test
找出所有gif圖片請求的號碼和其對應的請求大小總和及請求數總和.
awk -F"|" 'BEGIN{printf"no. c sum\n"}/gif$/{++req[$1];temp[$1]+=$2}END{for (i in temp){print i,req[i],temp[i]}}'
找出所有gif圖片請求的號碼,並按照其請求大小總和從大到小排序.
awk -F"|" 'BEGIN{printf"no. sum\n"}/gif$/{++req[$1];temp[$1]+=$2}END{for (i in temp){print i,temp[i]|"sort -k2"}}' test
找出所有gif圖片請求的號碼,並按其請求平均圖片大小從大到小排序.
awk -F"|" 'BEGIN{printf"no. c sum avg\n"}/gif$/{++req[$1];temp[$1]+=$2}END{for (i in temp){print i,req[i],temp[i],temp[i]/req[i]|"sort "}}' test