天天看点

谢烟客---------Linux之Aho Weinberger Kernighan

工作模式,类似cut功能,

<a href="https://s4.51cto.com/wyfs02/M02/A5/33/wKioL1m5K27gmyzzAABRuEsxdiY222.png" target="_blank"></a>

<a href="https://s3.51cto.com/wyfs02/M01/06/86/wKiom1m50UvhVkgDAAB7BsGSWQo319.png" target="_blank"></a>

<a href="https://s2.51cto.com/wyfs02/M00/A5/36/wKioL1m50SHBznafAAB8tnsJFeM192.png" target="_blank"></a>

<a href="https://s2.51cto.com/wyfs02/M02/06/86/wKiom1m50UvAQJN2AAB9rdvQkL8379.png" target="_blank"></a>

与sed区别

1、格式

<a href="https://s4.51cto.com/wyfs02/M02/A5/37/wKioL1m51LTymMxPAAAQEejcduo502.png" target="_blank"></a>

2、PATTERN

<a href="https://s2.51cto.com/wyfs02/M02/06/87/wKiom1m51SOTw6w2AAATrBlT8ag608.png" target="_blank"></a>

<a href="https://s1.51cto.com/wyfs02/M02/06/87/wKiom1m51iPyiZUjAAAYlb4tXSI235.png" target="_blank"></a>

<a href="https://s5.51cto.com/wyfs02/M01/06/87/wKiom1m51r7A8XvAAAAPx4yS46A797.png" target="_blank"></a>

<a href="https://s5.51cto.com/wyfs02/M01/06/87/wKiom1m52B_Cdr__AABDbgqs-rI881.png" target="_blank"></a>

<a href="https://s1.51cto.com/wyfs02/M00/06/87/wKiom1m52uLhQQPnAAAzN8t2rFk895.png" target="_blank"></a>

<a href="https://s2.51cto.com/wyfs02/M02/06/87/wKiom1m5242BChhAAAA16sjwe_A895.png" target="_blank"></a>

awk基本格式:

awk [OPTION...] 'PATTERN{ACTION STATEMENT;ACTION STATEMENT;...}' FILE1 FILE2 ...

OPTION:

    -F '' 指明分隔符

    -v var="value" 定义变量

PATTERN:定义读入哪些行时对行处理

ACTION: 对行如何处理,文本格式化输出:print,printf

1

<code>多个语句间用 ;</code>

1、变量

内建变量

<a href="https://s3.51cto.com/wyfs02/M00/06/84/wKiom1m5O_LCj4q1AAAX-yAsoIU007.png" target="_blank"></a>

<a href="https://s3.51cto.com/wyfs02/M00/A5/34/wKioL1m5O8mTyKdaAAAWRyeU204607.png" target="_blank"></a>

<a href="https://s3.51cto.com/wyfs02/M02/06/84/wKiom1m5O_PwzrcaAAAOhx8-uMs464.png" target="_blank"></a>

<a href="https://s3.51cto.com/wyfs02/M01/06/84/wKiom1m5O_PTvN-gAAAO9vry7Gk113.png" target="_blank"></a>

<a href="https://s3.51cto.com/wyfs02/M01/A5/34/wKioL1m5O8nDEmwgAAAWQdQmS_U497.png" target="_blank"></a>

<a href="https://s5.51cto.com/wyfs02/M01/A5/34/wKioL1m5O8qQyg32AAAXxtOtxtQ289.png" target="_blank"></a>

<a href="https://s5.51cto.com/wyfs02/M02/06/84/wKiom1m5O_OhdYXwAAAWdxdqr_0902.png" target="_blank"></a>

<a href="https://s5.51cto.com/wyfs02/M00/06/84/wKiom1m5O_TxoDqmAAAQjQbI-qs626.png" target="_blank"></a>

<a href="https://s4.51cto.com/wyfs02/M02/A5/34/wKioL1m5O_7AlT5xAAATSBHePBQ500.png" target="_blank"></a>

<a href="https://s5.51cto.com/wyfs02/M02/A5/34/wKioL1m5O__B2-E9AAAXnHVzJoQ203.png" target="_blank"></a>

自定义变量

<a href="https://s5.51cto.com/wyfs02/M00/A5/34/wKioL1m5PD7geF5ZAAAX_Rlrcnc416.png" target="_blank"></a>

变量应用注意

<a href="https://s5.51cto.com/wyfs02/M01/06/87/wKiom1m52ZaR-C3iAAATPuJkA20312.png" target="_blank"></a>

2、ACTION

print

<a href="https://s1.51cto.com/wyfs02/M01/A5/34/wKioL1m5PM3AQ32ZAAA7V3jg3S8671.png" target="_blank"></a>

printf

3、操作符

<a href="https://s1.51cto.com/wyfs02/M01/A5/34/wKioL1m5Pp_Q3M6cAAAmQmDnIbY928.png" target="_blank"></a>

<a href="https://s5.51cto.com/wyfs02/M01/06/84/wKiom1m5PrnxjqQyAAAvONOQYGw505.png" target="_blank"></a>

<a href="https://s1.51cto.com/wyfs02/M02/06/84/wKiom1m5P4PSxWsGAABdT9H_mCY541.png" target="_blank"></a>

4、PATTERN定界:'PATTERN{ACTION STATEMENT}'

<a href="https://s1.51cto.com/wyfs02/M00/A5/38/wKioL1m54HKBpFclAAAZDLCqtrI578.png" target="_blank"></a>

<a href="https://s1.51cto.com/wyfs02/M01/06/88/wKiom1m54Jyyy5jqAAAbtV5Epbs962.png" target="_blank"></a>

<a href="https://s1.51cto.com/wyfs02/M01/A5/38/wKioL1m54HLAmLRfAAARe_s4Itw444.png" target="_blank"></a>

<a href="https://s2.51cto.com/wyfs02/M02/06/88/wKiom1m54J2C179XAAA0YTk3tNI513.png" target="_blank"></a>

<a href="https://s2.51cto.com/wyfs02/M01/A5/38/wKioL1m54HOR1paGAAAbknCbA80348.png" target="_blank"></a>

<a href="https://s2.51cto.com/wyfs02/M00/06/88/wKiom1m54J2xd8TQAAAa9OCgxfI017.png" target="_blank"></a>

<a href="https://s2.51cto.com/wyfs02/M02/A5/38/wKioL1m54HSArFKOAABjUFrS39U185.png" target="_blank"></a>

5、ACTION

<a href="https://s3.51cto.com/wyfs02/M00/A5/39/wKioL1m54RqDlOrfAABE6HVfSJM312.png" target="_blank"></a>

5.1 if-else awk取得的行进行字段判断

2

<code>if</code> <code>(condition) {</code><code>true</code><code>-statement} 或  </code><code>if</code> <code>(condition) </code><code>true</code><code>-statement</code>

<code>if</code> <code>(condition) {</code><code>true</code><code>-statement} </code><code>else</code> <code>{</code><code>false</code><code>-statement}</code>

id号大于1000为普通用户

最后一个字段的行/bin/bash结尾

字段数大于5个,显示行,否则不显示

显示文件系统使用结果&gt;80则显示

3

<code>id</code><code>号大于1000为普通用户</code>

<code># awk -F ':' '{if ($3&gt;500){print $1,$3}}' /etc/passwd</code>

<code># awk -F ':' '{if ($3&gt;500){printf "%15s %-d\n",$1,$3}}' /etc/passwd</code>

<code>最后一个字段的行/bin/bash结尾</code>

<code># awk -F </code><code>':'</code> <code>'{if ($NF == "/bin/bash"){print $1,$3}}'</code> <code>/etc/passwd</code>

<code># awk -F </code><code>':'</code> <code>'{if ($NF ~ /\&lt;bash$/){print $NF}}'</code> <code>/etc/passwd</code>

<code>字段数大于</code><code>5</code><code>个,显示行,否则不显示</code>

<code># awk -F </code><code>':'</code> <code>'{if (NF&gt;5){print $0}}'</code> <code>/etc/passwd</code>

<code>显示文件系统使用结果&gt;</code><code>80</code><code>则显示</code>

<code># df -hP | awk -v FS=</code><code>"%"</code> <code>'!/^File/{print $1}'</code> <code>| awk </code><code>'{if ($NF&gt;80){print $1}}'</code>

5.2 while  对一行内的多个字段逐一处理时使用,对数组中各元素逐一处理时使用

4

5

<code>while</code> <code>(condition) {</code><code>true</code><code>-statement}</code>

<code>(condition) 判断条件</code>

<code> </code><code>{</code><code>true</code><code>-statement} 条件为真时,执行循环体</code>

<code>length(arg1,arg2,...) 显示字段的长度</code>

对整个一行中的各字段,显示各字段内容和字段中包含的字段的个数

对整个一行中的各字段,字段大于等于10才显示字段内容和字段中包含的字段的个数

<code># awk </code><code>'{i=1;while (i&lt;=NF){print $i,length($i);i++}}'</code> <code>/etc/fstab</code>

<code>思路: awk </code><code>'{print length($i)}'</code> <code>FILE</code>

<code>i表示每个字段即可</code>

<code># awk </code><code>'{i=1;while (i&lt;=NF){if (length($i)&gt;5)print $i,length($i);i++}}'</code> <code>/etc/fstab </code>

<code>循环嵌套</code><code>if</code><code>条件判断</code>

5.3 do-while循环

<code>do</code> <code>{</code><code>true</code><code>-statement} </code><code>while</code> <code>(condition)</code>

<code>至少执行一次循环体</code>

<code># awk </code><code>'{i=1;do {print $i,length($i);i++} while (i&lt;=NF)}'</code> <code>/etc/issue</code>

5.4   for 循环

<code>for</code> <code>(控制变量初始化;控制变量条件表达式;控制变量的修正表达式) {statement}</code>

<code>for</code> <code>(</code><code>var</code><code>iable assignment;condition;iteration process) {</code><code>for</code><code>-body}</code>

6

7

8

<code>显示模式匹配到的行</code>

<code># awk </code><code>'/^[[:space:]]+/{print}'</code> <code>/etc/grub.conf</code>

<code>用I表示每个字段</code>

<code># awk </code><code>'/^[[:space:]]+/{print length($i)}'</code> <code>/etc/grub.conf </code>

<code>套入循环格式 ,在循环体中要对I值进行修正</code>

<code># awk </code><code>'/^[[:space:]]+/{i=1;while (i&lt;=NF){print $i,length($i);i++}}'</code> <code>/etc/grub.conf</code>

<code>循环体中嵌套单分支</code><code>if</code><code>语句 ,单分支</code><code>if</code><code>的statement的{} 可省略</code>

<code># awk </code><code>'/^[[:space:]]+/{i=1;while (i&lt;=NF){if (length($i)&gt;=10)print $i,length($i);i++}}'</code> <code>/etc/grub.conf</code>

5.5 switch语句 多分支if

<code>switch</code> <code>(expression) (</code><code>case</code> <code>VALUE1 or /REGEXP1/:statement;</code><code>case</code> <code>VALUE2 or /REGEXP2/:statement;...; </code><code>default</code><code>:statemet)</code>

<code>表达式 == value1 或 表达式 ~ /REGEXP1</code>

》》》

5.6 break [n] 或 continue

<code>显示奇数字段</code>

<code># awk -F </code><code>':'</code> <code>'{i=1;while (i&lt;=NF){if (i%2==0) {i++;continue} else {print i,$i;i++}}}'</code> <code>/etc/passwd</code>

5.7 next 提前结束本行处理

<code>显示以/bin/bash结尾的行,非/bin/bash结尾的行next</code>

<code># awk -F </code><code>':'</code> <code>'{if ($NF != "/bin/bash"){next} else {print $0}}'</code> <code>/etc/passwd</code>

<code>显示用户id号为偶数的用户</code>

<code># awk -F </code><code>':'</code> <code>'{if ($3%2 != 0){next} else {print $0}}'</code> <code>/etc/passwd</code>

6、数组

<a href="https://s2.51cto.com/wyfs02/M02/A5/3A/wKioL1m57wGRCsIVAABH94izTmA928.png" target="_blank"></a>

<a href="https://s3.51cto.com/wyfs02/M01/06/8A/wKiom1m574DQl3EtAAALKKWV16E484.png" target="_blank"></a>

<code>显示第一个元素</code>

<code># awk </code><code>'BEGIN{weekdays["mon"]="Monday";weekdays["thu"]="Thuseday";print weekdays["mon"]}'</code>

统计netstat状态

统计日志IP

统计/etc/fstab文件中每个单词出现的次数

统计文件系统出现的次数

<code>统计netstat -tnl 中的状态</code>

<code>1</code><code>)查看所有状态</code>

<code>netstat -tan | awk </code><code>'{print $NF}'</code>

<code>2</code><code>)# netstat -tan | awk </code><code>'{state[$NF]++}END{for (i in state){print i,state[i]}}'</code>

9

10

<code>统计日志</code>

<code>1</code><code>)查看httpd是否被安装</code>

<code>rpm -q httpd</code>

<code>2</code><code>) 启动httpd</code>

<code>service httpd start</code>

<code>3</code><code>)httpd自带压力测试工具,ab</code>

<code>ab -c </code><code>100</code> <code>-n </code><code>1000</code> 

<code>4</code><code>)统计日志IP</code>

<code># awk </code><code>'{count[$1]++}END{for (i in count){print i,count[i]}}'</code> <code>/</code><code>var</code><code>/log/httpd/access_log</code>

<code>统计/etc/fstab文件中每个单词出现的次数</code>

<code># awk </code><code>'{i=1;while (i&lt;=NF){count[$i]++;i++}}END{for (i in count){print i,count[i]}}'</code> <code>/etc/fstab</code>

<code># awk </code><code>'{for(i=1;i&lt;=NF;i++){count[$i]++}}END{for (i in count){print i,count[i]}}'</code> <code>/etc/fstab</code>

<code>统计文件系统出现的次数</code>

<code># awk </code><code>'{print $3}'</code> <code>/etc/fstab </code>

<code># awk </code><code>'{count[$3]++}END{for (i in count){print i,count[i]}}'</code> <code>/etc/fstab</code>

7、函数

<a href="https://s2.51cto.com/wyfs02/M02/06/8B/wKiom1m585_x156HAAARyYvBxsw151.png" target="_blank"></a>

<a href="https://s4.51cto.com/wyfs02/M01/06/8B/wKiom1m59I2icVoBAAB_oXOBdAY332.png" target="_blank"></a>

统计每一个ip建立ip的个数

<code>统计每一个ip建立ip的个数</code>

<code># netstat -tnl | awk </code><code>'!/^Proto/ &amp;&amp; !/^Active/{split($5,state,":");ip[state[1]]++}END{for (i in ip){print i,ip[i]}}'</code>

本文转自 lccnx 51CTO博客,原文链接:http://blog.51cto.com/sonlich/1965174,如需转载请自行联系原作者

继续阅读