以爲這個文章不錯,就先記下來了!
一、awk是按行處理文本數據的、
二、awk中的術語將一行爲一個記錄;一個記錄還能夠根據分隔符爲多個字段、
三、$0標示整行內容(一個記錄)
a[$0]++ 用於分別統計不相同的記錄個數,即,相同的$0內容,個數累加。
例子:1.txt 的測試數據
111 abc def abc
222 ddd sss klm
333 efg xyz ddd
abc ddd sss klm
統計第二個字段域的名字和個數:?
awk '{ w[$2]+=1 }END {for (a in w) print a,w[a]}' 1.txt
[root@lzt-Exam script]# awk '{ w[$2]+=1 } END { for (a in w) print a,w[a]}' 1.txt
abc 1
efg 1
ddd 2
分析:
$2表示第二個字段,用w[abc]表示abc出現的次數,用w[ddd]表示ddd出現的次數,用w[efg]表示efg出現的次數。當$2=ddd的時候,累加w[ddd].這樣,w就是一個包含全部$2的字段的集合,
最後經過for循環,把各自出現的次數打印出來!
附錄之前碰到的題:順便記錄一下,便於翻看
有以下文件,請用awk命令計算出第二域含有bbb的個數
[root
@lnmp ~]# cat a.txt
aaa bbb cccc dddd
bbb ccc dddd eeee
ccc bbb dddd bbbb
eee fff zzzz ssss
ggg lll bbbb eeee
=======================================
測試數據:
[root
@oldboy ~]# cat a.txt
aaa bbb cccc dddd
bbb ccc dddd eeee
ccc bbb dddd bbbb
eee fff zzzz ssss
ggg lll bbbb eeee
王同窗率先發出兩個靠譜的答案:
1)
[root
@oldboy ~]# awk '$2=="bbb" {i=i+1} END {print i}' a.txt
2
2)
[root
@oldboy ~]# awk '{if($2=="bbb") i=i+1} END {print i}' a.txt
2
張同窗也發出來倆答案:
3)
[root@oldboy ~]# awk '{if($2=="bbb") ++oldboy[$2]} END {for (a in oldboy) print oldboy[a]}' a.txt
2
4)
[root@oldboy ~]# awk '{if($2=="bbb") ++oldboy[$2]} END {for (a in oldboy) print a,oldboy[a]}' a.txt
bbb 2
5)
某個11期的鄭同窗正在上課,趁着上課間隙也加入了10期羣裏的答題挑戰。
[root@oldboy ~]# awk '$2 == "bbb"' a.txt|wc -l
2
6)
[root@oldboy ~]# awk '{print $2}' a.txt |awk '/bbb/' |wc -l
2
7)
一個山東大漢(也是老男孩的學生,呵呵),意外的發言發言了,答案一樣使人震驚。
[root@oldboy ~]# aa=(`cat a.txt |awk '{print $2}' |awk '/bbb/'`)
[root@oldboy ~]# echo ${#aa[@]}
2
8)
龐風同窗也給了本身的答案。
[root@oldboy ~]# awk 'NF==4 && $2 ~ /bbb/ {print $2}' a.txt|sort|uniq -c
2 bbb