awk妙妙屋

awk [options] 'condition{cmd};condition{cmd}' file (分號不必須)
awk 接受標準輸入、管道、文件,逐行處理文本。

options 一覽
option 功能
-F 指定分隔符,默認是tab或者空格; -F '\t\t' 指定為雙tab
-v 設置變量,-v x=aa -v y=bb;awk -v x='hhh' '{print x}' file 不需使用$x取變量如果是x='hhh',需print "'$x'";
特殊常量一覽(諸如FS此類常量,取值不需 $)
常量 含義
FS field slash 字段分隔符,默認是空格
OFS field slash 輸出結果的字段分隔符,默認是空格
RS row slash 行分隔符,默認是換行符
ORS row slash 輸出結果的行分隔符,默認是換行符
NF number of field 當前行中字段數
NR number of row 當前行號,和sed一樣,從1開始
FNR 當前輸入文檔的當前行號,多個文檔時有用
FILENAME 當前輸入文檔的名稱
$0 當前行全部內容
$n 當前行中第n個字段
awk比較符
比較符號 功能
/aaa/ 全行數據正則匹配
!/aaa/ 全行數據正則匹配后取反
~/aaa/ 對特定數據正則匹配
!~/aaa/ 對特定數據正則匹配后取反
||、&& 、!=、 >、 <、 >=、<= 常規的含義
BEGIN & END

begin 是在讀取所有行之前執行一次,end是在讀完所有行后執行一次;
所有, 一般用BEGIN{cmd;cmd;...}來初始化 END{cmd;cmd;..}來匯總。

內置函數
函數聲明 功能
getline; 讀取下一行,執行后不影響其他命令執行,$0 NF等都置換為下一行的
next; 跳轉下一行,與getline不同的是,會從頭開始執行awk命令
sin(x) 求x的余弦值
cos(x) 求x的正弦值
tolower(str) 轉換為小寫字母
toupper(str) 轉換為大寫字母
split(str,arr[,sepr]) 將str根據sepr分割,存入到數組arr中,seperator默認是空格
gsub(regx,str[,t]) 將t中所有正則regx能匹配到的用str替換,t不寫默認是$0
sub(regx,str[,t]) 將t中第一個正則regx能匹配到的用str替換,t不寫默認是$0
substr(str,start,step) 截取字符串,從start起的step個字符
match(str,regx) 返回正則表達式在字符中的位置
index(str1,str2) 返回str2在str1中的位置
length(str) 返回str長度
rand() 返回一個0到1之間的隨機數
srand(x) 設置隨機種子
systemtime() 返回時間戳

system("cmd") 在awk中使用shell命令

實用命令
awk -v FS=":" '{print $1}' test.txt 重新定義字段分隔符為:
awk -v FS="[:,-,]" '{print $1}' test.txt 重新定義字段分隔符為:-
awk -v OFS=". " '{print NR,$0}' file 輸出結果標上行號
awk '/hello/{print $0}' file 基礎正則,匹配到行中包含hello的打印,{print $0}可省略

fsh all fwyymis ssh "cat /home/homework/log/zhibo-sql/zhibo_sql.log.slow.20201027*" | awk -F '[\]\[\?]' -v OFS=';' '{if(match($0,/URI/)==0){next}else{print $2,$7,$9,$(NF-1)}}' > slow.log.20201027

awk '{printf("%6.2f %s\n",\$2*\$3,$0)}' xxx.data | sort 按照第2列和第3列的乘積 排序輸出

cat access.log.2019070517 | grep /assistantdesk/desk/student/performance | cut -d " " -f 4 | sort | uniq -c | sort -r |head -10 統計日志中第四個參數(例如ip)出現次數最多的前10名

head -1 access.log.2019070517 | awk -F ' ' '{for(i=1;i<=NF;i++){print $i}}' | cat -n 一條日志 行轉列 并加行號

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。