AWK是一種處理文本文件的語(yǔ)言,是一個(gè)強(qiáng)大的文本分析工具。之所以叫 AWK 是因?yàn)槠淙×巳粍?chuàng)始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。三位創(chuàng)建者已將它正式定義為“樣式掃描和處理語(yǔ)言”。它允許創(chuàng)建簡(jiǎn)短的程序,這些程序讀取輸入文件、為數(shù)據(jù)排序、處理數(shù)據(jù)、對(duì)輸入執(zhí)行計(jì)算以及生成報(bào)表,還有無(wú)數(shù)其他的功能。
awk {pattern + action} {filenames}
盡管操作可能會(huì)很復(fù)雜,但語(yǔ)法總是這樣,其中 pattern 表示 AWK 在數(shù)據(jù)中查找的內(nèi)容,而 action 是在找到匹配內(nèi)容時(shí)所執(zhí)行的一系列命令?;ɡㄌ?hào)({})不需要在程序中始終出現(xiàn),但它們用于根據(jù)特定的模式對(duì)一系列指令進(jìn)行分組。pattern就是要表示的正則表達(dá)式,用斜杠括起來(lái)。
awk語(yǔ)言的最基本功能是在文件或者字符串中基于指定規(guī)則瀏覽和抽取信息,awk抽取信息后,才能進(jìn)行其他文本操作。完整的awk腳本通常用來(lái)格式化文本文件中的信息。
通常,awk是以文件的一行為處理單位的。awk每接收文件的一行,然后執(zhí)行相應(yīng)的命令,來(lái)處理文本。
FS:輸入字符分隔符,默認(rèn)為空白字符
OFS:輸出字段分隔符,默認(rèn)為空白 字符
RS:輸入記錄分隔符(輸入換行符),指定輸入時(shí)的額換行符
NF:number of Field,當(dāng)前行的字段的個(gè)數(shù),字段數(shù)量
NR:行號(hào),當(dāng)前處理的文本行的行號(hào)
FNR:各文件分別計(jì)數(shù)的行號(hào)
FILENAME:當(dāng)前文件名
ARGC:命令行參數(shù)的個(gè)數(shù)
ARGV:數(shù)組,保存的是命令行所給定的各參數(shù)
Awk-F : {printf("filename:%10s,linenumber:%s,columns:%s,linecontent:%s ",FILENAME,NR,NF,$0)} /etc/passwd
awk中同時(shí)提供了print和printf兩種打印輸出的函數(shù)。
其中print函數(shù)的參數(shù)可以是變量、數(shù)值或者字符串。字符串必須用雙引號(hào)引用,參數(shù)用逗號(hào)分隔。如果沒(méi)有逗號(hào),參數(shù)就串聯(lián)在一起而無(wú)法區(qū)分。這里,逗號(hào)的作用與輸出文件的分隔符的作用是一樣的,只是后者是空格而已。
printf函數(shù),其用法和c語(yǔ)言中printf基本相似,可以格式化字符串,輸出復(fù)雜時(shí),printf更加好用,代碼更易懂。
1. 進(jìn)行簡(jiǎn)單的四則運(yùn)算
awk -v a=100 -v b=3 BEGIN{printf("%4.2f ""%d ", a/b, 10/2)}
2. 查看當(dāng)前的內(nèi)存使用率,并進(jìn)行判斷,超過(guò)60輸出提示
vmstat 1 10|sed -n "7,12"p|awk -v ALL=`cat /proc/meminfo |grep MemTotal |awk {printf ("%d ",$2)}` {sum+=$4}END{print ((ALL-sum/6)/ALL)*100}|awk {if(($(NF))>60) print "memory usage beyond 60,is "$(NF);else print $(NF)}
3.文件系統(tǒng)使用率,超過(guò)65輸出
df -h |awk -F [ %]+ {if(NR!=1 && $5 >= 65) print $5 " "$6}
4.剔除最后兩列輸出前面全部?jī)?nèi)容
echo "/home/oracle/ogg/dirprm/mgr.prm"|awk -F/ {OFS="/"}{NF=NF-2}{print}
5.利用split行轉(zhuǎn)列
echo "12:34:56" | awk {split($0,a,":" ); for (i=1; i<=3; i++) print a[i]}
更多精彩干貨分享
點(diǎn)擊下方名片關(guān)注
IT那活兒
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/129913.html
摘要:以下都會(huì)使用到容器,所以執(zhí)行以下指令查看容器或者容器名稱檢查環(huán)節(jié)變量查看日志備份恢復(fù)備份使用進(jìn)入容器沒(méi)有剩余磁盤(pán)空間使用以下指令刪除容器和鏡像刪除所有容器刪除未使用的鏡像清理日 以下都會(huì)使用到容器 id,所以執(zhí)行以下指令查看容器 id 或者容器名稱 [yexiaobaideMacBook-Pro: ~]$ sudo docker ps CONTAINER ID IMAG...
摘要:實(shí)際上,認(rèn)為文本文件都是結(jié)構(gòu)化的,它將每一個(gè)輸入行定義為一個(gè)記錄,行中的每個(gè)字符串定義為一個(gè)域段,域和域之間使用分割符分割。 看到一篇Docker 技巧:刪除 Docker 容器和鏡像其中提到刪除標(biāo)簽為none的鏡像的方法,其中用到了awk,就去查了下,下面舉例說(shuō)明: docker rmi $(docker images | awk $1 == && $2 == {print $3...
摘要:防止文件系統(tǒng)下和根目錄下誤操作。監(jiān)控的表空間每月月底執(zhí)行的腳本每月日?qǐng)?zhí)行的腳本跟蹤結(jié)果的腳本放在腳本最后報(bào)警檢查系統(tǒng)的進(jìn)程可修改運(yùn)行示例 [shell編程] AIX shell工具集AIX1.批量改名或拷貝文件比如將 start.sh文件改為stop.sh拷貝先查看ls -l start*.sh|awk {m=$9; gs...
摘要:自己的小網(wǎng)站跑在阿里云的上面偶爾也去分析分析自己網(wǎng)站服務(wù)器日志看看網(wǎng)站的訪問(wèn)量。然后統(tǒng)計(jì)最終返回的數(shù)字就是當(dāng)前所有端口的已建立連接的總數(shù)。 自己的小網(wǎng)站跑在阿里云的ECS上面,偶爾也去分析分析自己網(wǎng)站服務(wù)器日志,看看網(wǎng)站的訪問(wèn)量??纯从袥](méi)有黑闊搞破壞!于是收集,整理一些服務(wù)器日志分析命令,大家可以試試! 1、查看有多少個(gè)IP訪問(wèn): awk {print $1} log_file|sor...
閱讀 1356·2023-01-11 13:20
閱讀 1707·2023-01-11 13:20
閱讀 1215·2023-01-11 13:20
閱讀 1906·2023-01-11 13:20
閱讀 4165·2023-01-11 13:20
閱讀 2757·2023-01-11 13:20
閱讀 1402·2023-01-11 13:20
閱讀 3671·2023-01-11 13:20