亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

linux系統運維三劍客

發布時間:2020-07-21 19:55:11 來源:網絡 閱讀:246 作者:Oliver_go123 欄目:系統運維

一. AWK
1.awk必備基本概念
a. $0,$1,$2概念
$0在沒有指定區域或分隔符的情況下默認輸出文件里的所有內容;
如果指定了區域,比如像下面這樣,那么會輸出區域的某幾行。
$1和$2是指輸出被FS字段分隔符分隔之后的第一列和第一列數據

[root@localhost ~]# awk 'NR==1{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# awk 'NR==2{print $0}' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin

b.NF,NR,FS,RS
FS:字段分隔符,可以用-F來指定字段分隔符;默認是空格
RS:記錄分隔符,默認是每行末尾的換行符\n,可以統計行數
NF:區域號,一般不用于指定第幾列。$NF指的是最后一列,可與print聯合使用
NR:行號,可以指定行號取數據,同時可以統計文件里的總共行數

[root@localhost ~]# awk -F ":" '{print "username:"$1"\t\tuid:"$3}' /etc/passwd|head -2
username:root       uid:0
username:bin        uid:1

\t是空格的意思

題目1:要求輸出/etc/passwd文件里的倒數第二行數據

[root@localhost ~]# awk 'END{print NR}' /etc/passwd
47

先利用END模塊取出所有行,再指定倒數第二行的行數。

題目2:要求將一些被換行符分隔的字段輸出為一行

[root@localhost jizuo]# vim awk/test-1.txt 
mmy the Weasel
100 Pleasant Drive
San Francisco, CA 12345

Big Tony
200 Incognito Ave.
Suburbia, WA 67890
[root@localhost jizuo]# awk 'BEGIN{FS="\n";RS=""}{print $1","$2","$3}' awk/test-1.txt 
mmy the Weasel,100 Pleasant Drive,San Francisco, CA 12345
Big Tony,200 Incognito Ave.,Suburbia, WA 67890

所用方法是將行分隔符(RS)由換行符改為空或空行;將FS(字段分隔符)由默認的空格改為換行符。
此種方法也有局限,就是只能輸出指定字段的文件成一行;如果是無限行數據呢,可以采用下面的方法:

root@localhost jizuo]# awk 'BEGIN{RS="EOF"}{gsub(/\n/,",");print}' awk/test-1.txt 
mmy the Weasel,100 Pleasant Drive,San Francisco CA 12345,Big Tony,200 Incognito Ave.,Suburbia WA 67890,

先將行分隔符改為"EOF",文件末尾的意思。然后利用gsub函數將換行符改為逗號,然后輸出

c. print模塊
在代碼塊中,只能有一個print命令。并且,如果只出現了print命令,那么將默認打印整行。
以下的兩個例子中可以看到,不論echo的是什么內容,awk依然輸出的是print的內容。包括第二個例子輸出了與/etc/passwd同樣行的hiya內容

[root@localhost ~]# echo hhh|awk '{print "hello world"}' 
hello world
[root@localhost ~]# awk '{print "hiya"}' /etc/passwd
hiya
hiya
hiya
hiya
hiya
hiya
hiya
...

d.BEGIN和END模塊

BEGIN模塊是在處理所有的文本信息之前執行的代碼塊,主要用于初始化FS變量及其他全局變量。
END模塊是在處理完文件中的所有行之后執行的代碼塊,主要用于執行最終計算和打印輸出結尾流的摘要信息。

e.運算符
算數運算符,邏輯運算符,關系運算符

[root@localhost ~]# awk 'BEGIN{a=5;a+=5;print a}'
10
[root@localhost ~]# awk 'BEGIN{a=1;b=2;print (a>2&&b>1,a>1||b>1)}'
0 1
[root@localhost ~]# echo|awk 'BEGIN{a="100testaaa"}a~/100/{print "ok"}'
ok
[root@localhost ~]# awk 'BEGIN{a="100testaaa";if(a~/100/){print"ok"}}'
ok

2.正則表達式
linux系統運維三劍客

a.輸出該文件里所有包含root的行

[root@localhost jizuo]# awk '/root/{print $1}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
dockerroot:x:985:979:Docker

輸出以冒號作為分隔符的第五列中包含root的整行數據

[root@localhost jizuo]# awk -F ':' '$5~/root/{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash

布爾表達式

[root@localhost jizuo]# awk -F: '$1=="root"&&$5=="root"{print $1","$5}' /etc/passwd
root,root

3.與if,while,數組的配合使用
題目1:將該服務器目前tcp連接各個狀態及個數輸出
先把最后一行取出來,然后利用數組和for循環對各個狀態進行計數
第二種方法是利用sort和uniq進行計數

[root@localhost jizuo]# netstat -an|awk '/^tcp/{++s[$NF]}END{for(a in s)print a,s[a]}'
LISTEN 22
ESTABLISHED 13
TIME_WAIT 61
SYN_SENT 54
[root@localhost jizuo]# netstat -an|awk '/^tcp/{print $NF}'|sort -n|uniq -c
     13 ESTABLISHED
     22 LISTEN
     54 SYN_SENT
     60 TIME_WAIT

題目2:統計 web 日志訪問流量,要求輸出訪問次數,請求頁面或圖片,每個請求的總大小,總訪問流量的大小匯總

awk '{a[$7]+=$10;++b[$7];total+=$10}END{for(x in a)print b[x],x,a[x]|"sort -rn -k1";print
"total size is :"total}' /app/log/access_log
total size is :172230
21 /icons/poweredby.png 83076
14 / 70546
8 /icons/apache_pb.gif 18608 

4.常用函數
a.替換函數gsub

[root@localhost jizuo]# awk 'BEGIN{info="this is a test2010test!";gsub(/[0-9]+/,"!",info);print info}'
this is a test!test!

b.索引查詢函數index

[root@localhost jizuo]# awk 'BEGIN{info="this is a test2010test!";print index(info,"test")?"ok":"no found";}'
ok
[root@localhost jizuo]# awk 'BEGIN{info="this is a test2010test!";print index(info,"testt")?"ok":"no found";}'
no found

c.split函數

[root@localhost jizuo]# awk 'BEGIN{info="this is a test";split(info,tA," ");print length(tA);for (k in tA){print k,tA[k];}}'
4
4 test
1 this
2 is
3 a
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南汇区| 贺兰县| 白朗县| 长春市| 金寨县| 十堰市| 江北区| 尉犁县| 张家川| 历史| 买车| 双柏县| 蚌埠市| 土默特右旗| 司法| 象州县| 泰顺县| 双桥区| 阜康市| 侯马市| 肥东县| 濮阳县| 来宾市| 瓮安县| 天水市| 固原市| 盈江县| 遵义市| 宿松县| 阿克苏市| 敦煌市| 南部县| 蚌埠市| 同心县| 宜黄县| 开原市| 青神县| 桃园县| 佳木斯市| 南澳县| 阿合奇县|