溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

文件處理器之——awk

發(fā)布時(shí)間:2020-07-31 04:48:02 來(lái)源:網(wǎng)絡(luò) 閱讀:53800 作者:wx5d3fd1efe40e3 欄目:系統(tǒng)運(yùn)維

一、awk簡(jiǎn)介:

awk 是一種編程語(yǔ)言,用于在 linux/unix 下對(duì)文本和數(shù)據(jù)進(jìn)行處理。數(shù)據(jù)可以來(lái)自標(biāo)準(zhǔn)輸入、一個(gè)或多個(gè)文件,或其它命令的輸出。它支持用戶(hù)自定義函數(shù)和動(dòng)態(tài)正則表達(dá)式等先進(jìn)功能,是linux/unix下的一個(gè)強(qiáng)大編程工具。它在命令行中使用,但更多是作為腳本來(lái)使用。

awk 的處理文本和數(shù)據(jù)的方式是這樣的,它逐行掃描文件,從第一行到最后一行,尋找匹配的特定模式的行,并在這些行上進(jìn)行你想要的操作。如果沒(méi)有指定處理動(dòng)作,則把匹配的行顯示到標(biāo)準(zhǔn)輸出(屏幕),如果沒(méi)有指定模式,則所有的操作的所指定的行都被處理。

二、awk的兩種形式語(yǔ)法格式

awk?[options]?'commands'?filenames???//過(guò)濾并輸出文件符合條件的內(nèi)容
awk?[options]?-f?awk-script-file?filenam??????//從腳本中調(diào)用編輯指令,過(guò)濾并輸出內(nèi)容

options:

-F??定義輸入字段分隔符,。默認(rèn)的分隔符是空格或制表符(tab)

commands

BEGIN{}?{}?END{}
行處理前?行處理?行處理后
BEGIN{}?通常用于定義一些變量,例如?BEGIN{FS=":";OFS="---"}

使用BEGIN語(yǔ)句設(shè)置計(jì)數(shù)和打印頭。BEGIN語(yǔ)句使用在任何文本瀏覽動(dòng)作之前,之后文本瀏覽動(dòng)作依據(jù)輸入文本開(kāi)始執(zhí)行,END語(yǔ)句用來(lái)在awk完成文本瀏覽動(dòng)作后打印輸出文本總數(shù)和結(jié)尾狀態(tài)。

awk命令格式

awk?'pattern'?filename??????????示例:awk?-F:?'/root/'?/etc/passwd?
awk?'{action}'?filename?????????示例:awk?-F:?'{print?$1}'?/etc/passwd?
awk?'pattern?{action}'?filename?示例:awk?-F:?'/root/{print?$1,$3}'?/etc/passwd?
????????????????????????????????示例:awk?'BEGIN{FS=":"}?/root/{print?$1,$3}'?/etc/passwd
command?|awk?'pattern?{action}'?示例:df?-P|?grep?'/'?|awk?'$4?>?25000?{print?$4}'

三、awk工作原理

#?awk?-F:?'{print?$1,$3}'?/etc/passwd

(1)awk 使用一行作為輸入,并將這一行賦給內(nèi)部變量$0,每一行也可稱(chēng)為一個(gè)記錄,以換行符結(jié)束

(2)然后,行被:(默認(rèn)為空格或制表符)分解成字段(或域),每個(gè)字段存儲(chǔ)在已編號(hào)的變量中,從$1 開(kāi)始,最多達(dá) 100 個(gè)字段

(3)awk 如何知道用空格來(lái)分隔字段的呢? 因?yàn)橛幸粋€(gè)內(nèi)部變量 FS 來(lái)確定字段分隔符。初始時(shí),F(xiàn)S 賦為空格

(4)awk 打印字段時(shí),將以設(shè)置的方法使用 print 函數(shù)打印,awk 在打印的字段間加上空格,因?yàn)?1,$3 之間有一個(gè)逗號(hào)。逗號(hào)比較特殊,它映射為另一個(gè)內(nèi)部變量,稱(chēng)為輸出字段分隔符 OFS,OFS 默認(rèn)為空格

(5)awk 輸出之后,將從文件中獲取另一行,并將其存儲(chǔ)在$0 中,覆蓋原來(lái)的內(nèi)容,然后將新的字符串分隔成字段并進(jìn)行處理。該過(guò)程將持續(xù)到所有行處理完畢

文件處理器之——awk

四、awk內(nèi)建變量

FS:指定每行文本的字段分隔符,默認(rèn)為空格或制表位。(-F)
NF:當(dāng)前處理的行的字段個(gè)數(shù)。
NR:當(dāng)前處理的行的行號(hào)(序數(shù))。
$0:當(dāng)前處理的行的整行內(nèi)容。
$n:當(dāng)前處理行的第?n?個(gè)字段(第?n?列)。
FILENAME:被處理的文件名。RS:數(shù)據(jù)記錄分隔,默認(rèn)為\n,即每行為一條記錄。


文件處理器之——awk

文件處理器之——awk

五、格式化輸出

print函數(shù)

#?date?|awk?'{print?"Month:?"?$2?"\nYear:?"?$NF}'
#?awk?-F:?'{print?"username?is:?"?$1?"\t?uid?is:?"?$3}'?/etc/passwd
#?awk?-F:?'{print?"\tusername?and?uid:?"?$1,$3?"!"}'?/etc/passwd

文件處理器之——awk

printf 函數(shù)

#?awk?-F:?'{printf?"%-15s?%-10s?%-15s\n",?$1,$2,$3}'?/etc/passwd
#?awk?-F:?'{printf?"|%-15s|?%-10s|?%-15s|\n",?$1,$2,$3}'?/etc/passwd

%s 字符類(lèi)型

%d 數(shù)值類(lèi)型

占 15 字符

- 表示左對(duì)齊,默認(rèn)是右對(duì)齊

printf 默認(rèn)不會(huì)在行尾自動(dòng)換行,加\n

文件處理器之——awk

===========================

六、awk模式

1、正則表達(dá)式

匹配記錄(整行):

#?awk?'/^alice/'?/etc/passwd
#?awk?'$0?~?/^alice/'?/etc/passwd
#?awk?'!/alice/'?passwd
#?awk?'$0?!~?/^alice/'?/etc/passwd

匹配字段:匹配操作符(~? ? ?!~)

#?awk?-F:?'$1?~?/^alice/'?/etc/passwd
#?awk?-F:?'$NF?!~?/bash$/'?/etc/passwd

文件處理器之——awk

2、比較表達(dá)式:

比較表達(dá)式采用對(duì)文本進(jìn)行比較,只有當(dāng)條件為真,才執(zhí)行指定的動(dòng)作。比較表達(dá)式使用關(guān)系運(yùn)算符,

用于比較數(shù)字與字符串。


關(guān)系運(yùn)算符

運(yùn)算符 含義 示例

<?小于?x<y
<=?小于或等于?x<=y
==?等于?x==y
!=?不等于?x!=y
>=?大于等于?x>=y
>?大于?x>y
#?awk?-F:?'$3?==?0'?/etc/passwd
#?awk?-F:?'$3?<?10'?/etc/passwd
#?awk?-F:?'$7?==?"/bin/bash"'?/etc/passwd
#?awk?-F:?'$1?==?"alice"'?/etc/passwd
#?awk?-F:?'$1?~?/alice/?'?/etc/passwd
#?awk?-F:?'$1?!~?/alice/?'?/etc/passwd
#?df?-P?|?grep?'/'?|awk?'$4?>?25000'

文件處理器之——awk

3、條件表達(dá)式:

#?awk?-F:?'$3>300?{print?$0}'?/etc/passwd
#?awk?-F:?'{?if($3>300)?print?$0?}'?/etc/passwd
#?awk?-F:?'{?if($3>300)?{print?$0}?}'?/etc/passwd
#?awk?-F:?'{?if($3>300)?{print?$3}?else{print?$1}?}'?/etc/passwd

文件處理器之——awk

4、算術(shù)運(yùn)算:+ - * / %(模) ^(冪 2^3)

可以在模式中執(zhí)行計(jì)算,awk 都將按浮點(diǎn)數(shù)方式執(zhí)行算術(shù)運(yùn)算

#?awk?-F:?'$3?*?10?>?500'?/etc/passwd
#?awk?-F:?'{?if($3*10>500){print?$0}?}'?/etc/passwd

文件處理器之——awk

5、邏輯操作符和復(fù)合模式

&&?邏輯與?a&&b
||?邏輯或?a||b
!?邏輯非?!a
#?awk?-F:?'$1~/root/?&&?$3<=15'?/etc/passwd
#?awk?-F:?'$1~/root/?||?$3<=15'?/etc/passwd
#?awk?-F:?'!($1~/root/?||?$3<=15)'?/etc/passwd

文件處理器之——awk

6、范圍模式

#?awk?'/Tom/,/Suzanne/'?filename

示例

1、統(tǒng)計(jì)系統(tǒng)給用戶(hù)數(shù)

文件處理器之——awk

2、統(tǒng)計(jì)用戶(hù)名為4個(gè)字符的用戶(hù)

文件處理器之——awk

3、自定義變量。查詢(xún)r(jià)oot用戶(hù)

文件處理器之——awk

4、獲得網(wǎng)卡IP(出ipv6以外的所有IP)

文件處理器之——awk


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI