天天看点

awk基础知识

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

<code>1.脚本:</code>

<code>[root@oldboy ~]</code><code># cat test</code>

<code>wang     4</code>

<code>cui      3</code>

<code>zhao     4</code>

<code>liu      3</code>

<code>chang    5</code>

<code>li       2</code>

<code>[root@oldboy ~]</code><code># </code>

<code>问题</code>

<code> </code><code>1 通过第一个域找出字符长度为4的  知识点:(length函数)</code>

<code>[root@oldboy ~]</code><code># awk '{if(length($1)=="4"){print $0}}' test</code>

<code>[root@oldboy ~]</code><code># awk '{len=length($1);if(len=="4"){print $0}}' test</code>

<code>2. 将文档中 liu 字符串替换为 hong  知识点 gsub(</code><code>/r/</code><code>,</code><code>"s"</code><code>,域)</code>

<code>[root@oldboy ~]</code><code># awk '{gsub(/liu/,"hong",$1);print $0}'  test</code>

<code>hong 3</code>

<code>3.第二列求和  </code>

<code>[root@oldboy ~]</code><code># awk 'BEGIN{sum=0}{sum=sum+$2}END{print sum}' test</code>

<code>24</code>

<code>[root@oldboy ~]</code><code># echo "4+3+4+6+7"|bc</code>

<code>4.第二列求平均值   双变量 或者运用内置变量NR</code>

<code>[root@oldboy ~]</code><code># awk 'BEGIN{sum=0;i=0}{sum=sum+$2;i++}END{print sum/i}' test            </code>

<code>3.42857</code>

<code>[root@oldboy ~]</code><code># awk 'BEGIN{sum=0}{sum=sum+$2}END{print sum/NR}' test         </code>

<code>[root@oldboy ~]</code><code>#</code>

<code>5.第二列求最大值    和最初的一个值进行比较</code>

<code>[root@oldboy ~]</code><code># awk 'BEGIN{a=0}{if($2&gt;a){a=$2}}END{print a}' test</code>

<code>5</code>

<code>6. 去重统计</code>

<code>[root@oldboy ~]</code><code># awk '{arry[$1]++}END{for(i in arry){print arry[i],i}}'  test|sort -nr </code>

<code>2 liu</code>

<code>1 zhao</code>

<code>1 wang</code>

<code>1 li</code>

<code>1 cui</code>

<code>1 chang</code>

<code>脚本:</code>

<code>[root@oldboy ~]</code><code># cat   test02</code>

<code>zhangsan    80</code>

<code>lisi            81.5</code>

<code>wangwu      93</code>

<code>zhangsan    85</code>

<code>lisi        88</code>

<code>wangwu      97</code>

<code>zhangsan    90</code>

<code>lisi              92</code>

<code>wangwu      88</code>

<code>7.(求每人的平均值)</code>

<code>反思a数组主要用于  第一列的唯一表示  累加</code>

<code>      </code><code>b  数组用于统计每个第一列的个数</code>

<code>key 就是数组内的值 </code>

<code>a[key]  就是key 多对应的第几列的值</code>

<code>[root@oldboy ~]</code><code># awk '{a[$1]+=$2;b[$1]++}END{for(key  in a){print key,a[key]/b[key]}}'  test02  </code>

<code>zhangsan 85</code>

<code>lisi 87.1667</code>

<code>wangwu 92.6667</code>

<code>[root@oldboy ~]</code><code># awk '{a[$1]+=$2;b[$1]++}END{for(key  in a){print key,a[key]}}'  test02        </code>

<code>zhangsan 255</code>

<code>lisi 261.5</code>

<code>wangwu 278</code>

<code>[root@oldboy ~]</code><code># awk '{a[$1]+=$2;b[$1]++}END{for(key  in a){print b[key]}}'  test02  </code>

<code>3</code>

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

<code>8.</code><code>awk</code>  <code>增加表标题和行(主要用来统计)</code>

<code>[root@oldboy ~]</code><code># awk 'BEGIN{FS=":";print "name\tshell"}{print $1"\t"$7}END{print "blue,/bin/bash"}'  /etc/passwd </code>

<code>name    shell</code>

<code>root    </code><code>/bin/bash</code>

<code>bin     </code><code>/sbin/nologin</code>

<code>daemon  </code><code>/sbin/nologin</code>

<code>adm     </code><code>/sbin/nologin</code>

<code>lp      </code><code>/sbin/nologin</code>

<code>sync</code>    <code>/bin/sync</code>

<code>shutdown</code>        <code>/sbin/shutdown</code>

<code>halt    </code><code>/sbin/halt</code>

<code>9.搜索哪一个关键字</code>

<code>[root@oldboy ~]</code><code># awk 'BEGIN{FS=":"}/root/'  /etc/passwd</code>

<code>root:x:0:0:root:</code><code>/root</code><code>:</code><code>/bin/bash</code>

<code>operator:x:11:0:operator:</code><code>/root</code><code>:</code><code>/sbin/nologin</code>

<code>10.搜索以什么开头的行</code>

<code>[root@oldboy ~]</code><code># awk '/^root/'  /etc/passwd</code>

<code>11.搜索以多个开头的行</code>

<code>[root@oldboy ~]</code><code># awk '/^(sshd|root)/'  /etc/passwd</code>

<code>sshd:x:74:74:Privilege-separated SSH:</code><code>/var/empty/sshd</code><code>:</code><code>/sbin/nologin</code>

<code>12.搜索以字母开头的行</code>

<code>[root@oldboy ~]</code><code># awk  '/^[rd]/'  /etc/passwd</code>

<code>daemon:x:2:2:daemon:</code><code>/sbin</code><code>:</code><code>/sbin/nologin</code>

<code>dbus:x:81:81:System message bus:/:</code><code>/sbin/nologin</code>

<code>13.条件判断</code>

<code>[root@oldboy ~]</code><code># awk 'BEGIN{FS=":"}{if($2=="x"&amp;&amp;$3&lt;=10){print $0}}'  /etc/passwd    </code>

<code>bin:x:1:1:bin:</code><code>/bin</code><code>:</code><code>/sbin/nologin</code>

<code>adm:x:3:4:adm:</code><code>/var/adm</code><code>:</code><code>/sbin/nologin</code>

<code>lp:x:4:7:lp:</code><code>/var/spool/lpd</code><code>:</code><code>/sbin/nologin</code>

<code>sync</code><code>:x:5:0:</code><code>sync</code><code>:</code><code>/sbin</code><code>:</code><code>/bin/sync</code>

<code>shutdown</code><code>:x:6:0:</code><code>shutdown</code><code>:</code><code>/sbin</code><code>:</code><code>/sbin/shutdown</code>

<code>halt:x:7:0:halt:</code><code>/sbin</code><code>:</code><code>/sbin/halt</code>

<code>mail:x:8:12:mail:</code><code>/var/spool/mail</code><code>:</code><code>/sbin/nologin</code>

<code>uucp:x:10:14:uucp:</code><code>/var/spool/uucp</code><code>:</code><code>/sbin/nologin</code>

<code>14.统计一个文件的行数</code>

<code>[root@oldboy ~]</code><code># awk 'BEGIN{sum=0}{sum++}END{print sum}'  /etc/passwd </code>

<code>15.统计一个文件夹下的字节数</code>

<code>[root@oldboy ~]</code><code># ls -l |awk 'BEGIN{size=0}{size+=$5}END{print size}'  </code>

<code>29479</code>

<code>16.length</code>

<code>[root@oldboy ~]</code><code># awk 'BEGIN{FS=":"}{len=length($5);if(len&gt;4){print $0}}' /etc/passwd</code>

<code>games:x:12:100:games:</code><code>/usr/games</code><code>:</code><code>/sbin/nologin</code>

<code>gopher:x:13:30:gopher:</code><code>/var/gopher</code><code>:</code><code>/sbin/nologin</code>

<code>ftp</code><code>:x:14:50:FTP User:</code><code>/var/ftp</code><code>:</code><code>/sbin/nologin</code>

<code>nobody:x:99:99:Nobody:/:</code><code>/sbin/nologin</code>

<code>vcsa:x:69:69:virtual console memory owner:</code><code>/dev</code><code>:</code><code>/sbin/nologin</code>

<code>haldaemon:x:68:68:HAL daemon:/:</code><code>/sbin/nologin</code>

<code>saslauth:x:499:76:Saslauthd user:</code><code>/var/empty/saslauth</code><code>:</code><code>/sbin/nologin</code>

<code>17.查看系统的端口号:</code>

<code>[root@oldboy ~]</code><code># awk -F "[ /]+" '$1~/^(ftp|ssh|https|mysql|ssh)$/{print $1,$2}'  /etc/services |uniq </code>

<code>ftp</code> <code>21</code>

<code>ssh</code> <code>22</code>

<code>https 443</code>

<code>mysql 3306</code>

<code>18.求1-100之间的和</code>

<code>[root@oldboy ~]</code><code># seq 100|awk '{sum+=$1}END{print sum}'       </code>

<code> </code><code>5050</code>

<code>19.求PATH路径中命令为三个字母的个数</code>

<code>[root@oldboy ~]</code><code># find  `echo $PATH|tr ":" " "`  -type f -name "???"|awk  -F "/" '{i++;print $4}END{print "总的个数为:" i}'&gt;&gt;command.txt</code>

<code>20.统计日志的IP的个数,并统计每个ip的个数</code>

<code>[root@oldboy ~]</code><code># awk -F "[ ]+"  '{arry[$1]++}END{for(key in arry){print arry[key],key}}' access_awk.log  |sort -nr|head   -n 10</code>

<code>179 112.64.171.98</code>

<code>114 49.70.160.35</code>

<code>108 180.157.41.101</code>

<code>98 124.79.108.144</code>

<code>97 58.220.223.62</code>

<code>90 61.170.130.208</code>

<code>73 116.25.32.13</code>

<code>72 218.79.64.76</code>

<code>62 115.228.107.174</code>

<code>61 180.154.238.125</code>

<code>21.统计单词和字母的个数</code>

<code>用shell处理以下内容</code>

<code>1、按单词出现频率降序排序!</code>

<code>2、按字母出现频率降序排序!</code>

<code>源数据:</code>

<code>the squid project provides a number of resources to assist </code><code>users</code> <code>design,implement and support squid installations. Please browse the documentation and support sections </code><code>for</code> <code>more</code> <code>infomation</code>

<code>[root@oldboy ~]</code><code># egrep   -o  "[a-Z]+"  work |awk '{a[$1]++}END{for(key in a){print key,a[key]}}' |sort -nrk2</code>

<code>the 2</code>

<code>support 2</code>

<code>squid 2</code>

<code>and 2</code>

<code>users</code> <code>1</code>

<code>to 1</code>

<code>sections 1</code>

<code>resources 1</code>

<code>[root@oldboy ~]</code><code># egrep   -o  "[a-Z]"  work |awk '{a[$1]++}END{for(key in a){print key,a[key]}}' |sort -nrk2</code>

<code>s 19</code>

<code>e 17</code>

<code>o 16</code>

<code>t 14</code>

<code>n 12</code>

<code>i 12</code>

<code>r 11</code>

<code>a 9</code>

本文转自 小小三郎1 51CTO博客,原文链接:http://blog.51cto.com/wsxxsl/1832197,如需转载请自行联系原作者