日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux awk入门,awk入门应用

發布時間:2024/9/27 linux 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux awk入门,awk入门应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

awk概述

awk是一種編程語言,用于在linux/unix下對文本和數據進行處理。數據可以來自標準輸入、一個或多個文件,或其它命令的輸出。它支持用戶自定義函數和動態正則表達式等先進功能,是linux/unix下的一個強大編程工具。它在命令行中使用,但更多是作為腳本來使用。awk的處理文本和數據的方式是這樣的,它逐行掃描文件,從第一行到最后一行,尋找匹配的特定模式的行,并在這些行上進行你想要的操作。如果沒有指定處理動作,則把匹配的行顯示到標準輸出(屏幕),如果沒有指定模式,則所有被操作所指定的行都被處理。awk分別代表其作者姓氏的第一個字母。因為它的作者是三個人,分別是Alfred?Aho、Brian?Kernighan、Peter?Weinberger。gawk是awk的GNU版本,它提供了Bell實驗室和GNU的一些擴展。下面介紹的awk是以GUN的gawk為例的,在linux系統中已把awk鏈接到gawk,所以下面全部以awk進行介紹。

使用語法

awk [ -F Ere ] [ -v Assignment ] … { -f ProgramFile | 'Program' } [ [ File … | Assignment … ] ] …

常用命令選項

-F fs or --field-separator fs

指定輸入文件折分隔符,fs是一個字符串或者是一個正則表達式,如-F:。

-v var=value or --asign var=value

賦值一個用戶定義變量。

-f scripfile or --file scriptfile

從腳本文件中讀取awk命令。

相關輸出命令

print item1,item2,…

要點:

逗號作為item的分隔符

輸出的item可是字符串,也可以是數值:當前記錄的字段、變量或awk的表達式

如省略item,相當于print $0

printf FORMAT,item1,item2,….

要點:

FORMAT是必須要給出的

不會自動換行,需要顯示給出換行控制符?\n

FORMAT中需要分別為后面的每個item指定一個格式化符號

相關格式符

格式符

描述

%c

顯示字符的ASCII碼

%d,%i

顯示十進制整數

%e,%E

科學計數法數值顯示

%f

顯示為浮點數

%g,%G

以科學計數法或浮點形式顯示數值

%s

顯示字符串

%u

無符號整數

%%

顯示%自身

相關修飾符

修飾符

描述

m[.n]

m表示控制顯示的寬度,默認右對齊;n表示小數點后的精度

左對齊

+

顯示數值的符號

相關內建變量

變量名

描述

FS

input field seperator ,指定輸入分隔符,默認為空白字符

OFS

output field seperator,指定輸出分隔符,默認為空白字符

RS

input record seperator,指定輸入行分隔符

ORS

output record seperator,指定輸出行分隔符

NF

number of field,字段數量

{print NF}

打印統計的字段數量

{print $NF}

打印每行的最后一字段

NR

number of record,行數

FNR

多文件統計,各文件分別計數,顯示行數

FILENAME

當前文件名

ARGC

命令行參數的個數

ARGV

命令行中給定的各參數

相關內置函數

函數表達式

描述

rand()

返回0-1之間的隨機數,小數

length([$])

返回指定字符串的長度

sub(r,s,[t])

以r表示的模式來查找t所表示的字符串中的匹配的內容,并將其第一次出現替換為s所表示的內容

gsub(r,s,[t])

以r表示的模式來查找t所表示的字符串中的匹配的內容,并將其所有出現全部替換為s所表示的內容

split(s,a[,r])

以r為分隔符切割字符s,并將切割后的結果保存在a所表示的數組中

相關操作符

運算符

描述

= += -= *= /= %= ^= **=

賦值

?:

C條件表達式

||

邏輯或

&&

邏輯與

~

匹配正則表達式

~!

不匹配正則表達式

< <= > >= != ==

關系運算符

空格

連接

+ –

加,減

* / &

乘,除與求余

+ – !

一元加,減和邏輯非

^ ***

求冪

++ –

增加或減少,作為前綴或后綴

$

字段引用

in

數組成員

相關模式

模式

描述

empty

空模式,匹配每一行

BEGIN{}

僅在開始處理文件中的文本之前執行一次

END{}

僅在文本處理完成之后執行一次

/regular expression/

僅處理能夠被此處模式匹配到的行

relational expression

關系表達式,結果有"真"有"假",結果為"真"才會被處理,真:結果為非0值,非空字符串

line ranges

行范圍,startline,endline:/pat1/,/pat2/或(NR>=startline&&NR<=endline)

相關控制語句及示例

if(condition) statements

找出系統上UID大于等于1000的用戶,并將用戶輸出形式類似于“Conmon user: gwx”

awk?-F:?'{if?($3>=1000)?printf?"Common?user:?%s\n",$1}'?/etc/passwd

找出系統上默認shell為/bin/bash的用戶,并輸出該用戶的用戶名

awk?-F:?'{if?($NF?==?"/bin/bash")print?$1}'?/etc/passwd

找出系統上默認shell為bash的用戶,并輸出該用戶的用戶名

awk?-F:?'{if?($NF~"bash$")print?$1}'?/etc/passwd

輸出當前系統上fstab掛載的設備情況

awk??'{if?($1!="#")print?$0}'?/etc/fstab

輸出當前系統使用比例超過80%的分區

df?-h?|awk?-F%?'/\/dev/{print?$1}'|awk?'{if?($NF>80)print?$1}'

if(condition){statements} else {statements}

找出系統上UID大于等于1000的用戶,并將用戶輸出形式類似于“Conmon user: gwx”,其余用戶輸出形式類似于“Sysuser:php”

awk?-F:?'{if?($3>=1000)?{printf?"Common?user:?%s\n",$1}?else?{printf?"Sysuser:?%s\n",$1}}'?/etc/passwd

while (condition){statements}

輸出當前系統/etc/grub2.cfg文件中以linux16開頭的行的字符數大于等于7個的字段,并在字段的后面顯示該字段的字符數

awk?'/^[[:space:]]*linux16/{i=1;while?(i<=NF){if?(length($i)>=7){print?$i,length($i)};i++}}'?/etc/grub2.cfg

for(expr1;expr2;expr3){statements}

輸出當前系統/etc/grub2.cfg文件中以linux16開頭的行字段,并在字段的后面顯示該字段的字符數

awk?'/^[[:space:]]*linux16/{for?(i=1;i<=NF;i++){print?$i,length($i)}}'?/etc/grub2.cfg

相關擴展 針對與使用awk統計網站訪問相關

日志字段定義樣例如下,如果日志文件做了輪替設置,請查看對應要統計的日志文件做統計分析

10.6.9.15 – – [12/Nov/2016:16:24:15 +0800] "GET / HTTP/1.1" 200 258 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36"

統計訪問頻次最高的5個ip

cat?/var/log/httpd/access_log?|awk?'{print?$1}'|sort|uniq?-c|sort?-nr|head?-5

統計惡意ip

cat?/var/log/httpd/access_log|awk?'{if($9~/40/){print?$1}}'|sort|uniq|sort?-nr

找出訪問最多的文件(下載類網站常用,這里以.exe擴展名舉例)

cat?/var/log/httpd/access_log|awk?'($7?~/.exe/){print?$10?""?$1?""?$4""$7}'?|sort?-n?|uniq?-c?|sort?-nr?|head?-10

統計該網站的流量,統計結果以“G“”顯示

cat?/var/log/httpd/access_log|awk?'{sum+=$10}?END?{print?sum/1024/1024/1024"G"}'

查看日志中出現100次以上的IP

cat?/var/log/httpd/access_log-20161113|cut?-d?'?'?-f?1?|sort?|uniq?-c?|?awk?'{if?($1?>?100)?print?$0}'

查看某一IP在網站內都訪問了哪些資源

cat?/var/log/httpd/access_log-20161113|?grep?10.6.9.15|?awk?'{print?$1"\t"$7}'?|?sort?|?uniq?-c?|?sort?-nr?|?less

原創文章,作者:N24-wenxuan,如若轉載,請注明出處:http://www.178linux.com/62423

總結

以上是生活随笔為你收集整理的linux awk入门,awk入门应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。