Linux系统命令三剑客之 awk
命令名稱:awk
作用:
? ? ?對文本和數據進行處理
詳細說明:
? ? ?awk 是一種編程語言,用于在linux/unix下對文本和數據進行處理。
?數據可以來自標準輸入(stdin)、一個或多個文件,或其它命令的輸出。
?它在命令行中使用,但更多是作為腳本來使用。awk有很多內建的功能,
?比如數組、函數等,這是它和C語言的相同之處,靈活性是awk最大的優勢。
語法格式:
? ? ?awk [options] 'scripts' var=value filename
常用參數:
? ? ?-F 指定分隔符(可以是字符串或正則表達式)
?-f 從腳本文件中讀取awk命令
?-v var=value 賦值一個用戶定義變量,將外部變量傳遞給awk
awk 腳本基本結構:
awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' filename
?一個awk 腳本通常由BEGIN語句+模式匹配+END語句三部分組成,這三部分都是可選項
工作原理:
第一步執行BEGIN 語句
第二步從文件或標準輸入讀取一行,然后再執行pattern語句,逐行掃描文件到文件全部被讀取
第三步執行END語句
? ? ? ? ?echo "hello world" | awk 'BEGIN{ print "welcome" } END{ print "2017-08-08" }'
? ? ? ? ?welcome
? ? ? ? ?2017-08-08
? ? ? ? ?echo -e? "hello world" | awk 'BEGIN{ print "welcome" } {print} END{ print "2017-08-08" }'
? ? ? ? ?welcome
? ? ? ? ?hello world
? ? ? ? ?2017-08-08
? ? ? ? ?#不加print參數時默認只打印當前的行
? ? ? ? ?[root@mingongge ~]# echo |awk '{ a="hello"; b="nihao"; c="mingongge"; print a,b,c; }'
? ? ? ? ?hello nihao mingongge
? ? ? ? #使用print以逗號分隔時,打印則是以空格分界
? ? ? ? ?echo |awk '{ a="mgg"; b="mingg"; c="mingongge"; print a" is "b" or "c; }'
? ? ? ? ?mgg is mingg or mingongge
? ? ? ? #awk的print語句中雙引號其實就是個拼接作用
awk 的變量使用:
??? ?內置變量
?$0? ? ? ?#當前記錄
?$1~$n? ? #當前記錄的第N個字段
?FS? ? ? ?#輸入字段分隔符(-F相同作用)默認空格
?RS? ? ? ?#輸入記錄分割符,默認換行符
?NF? ? ? ?#字段個數就是列? ??
?NR? ? ? ?#記錄數,就是行號,默認從1開始
?OFS? ? ? #輸出字段分隔符,默認空格
?ORS? ? ? #輸出記錄分割符,默認換行符? ? ?
?外部變量傳入
?[mingongge@ ~]#a=100
? ? ? ? ?[mingongge@ ~]#b=100
? ? ? ? ?[mingongge@ ~]#echo |awk '{print v1*v2 }' v1=$a v2=$b
? ? ? ? ?10000
awk 運算與判斷:
? ? ?算術運算符
? ? ? ? ?+ -? 加減
?* / & 乘 除 求余
? ? ? ? ^ *? 求冪
++ -- 增加或減少,作為前綴或后綴
[mingongge@ ~]#awk 'BEGIN{a="b";print a,a++,a--,++a;}'
? ? ? ? ?b 0 1 1
[mingongge@ ~]#awk 'BEGIN{a="0";print a,a++,a--,++a;}'
? ? ? ? ?0 0 1 1
[mingongge@ ~]#awk 'BEGIN{a="0";print a,a++,--a,++a;}'
? ? ? ? ?0 0 0 1
#和其它編程語言一樣,所有用作算術運算符進行操作,操作數自動轉為數值,所有非數值都變為0
? ? ?賦值運算符
?= += -= *= /= %= ^= **=
?正則運算符
? ? ?~ !~? 匹配正則表達式/不匹配正則表達式
? ? ?邏輯運算符 ?
? ? ? ||? &&? 邏輯或? 邏輯與
?關系運算符
? < <= > >= != =?
?其它運算符
?$? ? ? 字段引用?
?空格? ?字符串鏈接符
??:? ? ?三目運算符
?ln? ? ?數組中是否存在某鍵值
awk 正則:
? ? ?^? ? 行首定位符
?$? ? 行尾定位符
?.? ? 匹配任意單個字符
?*? ? 匹配0個或多個前導字符(包括回車)
?+? ? 匹配1個或多個前導字符
??? ? 匹配0個或1個前導字符? ?
?[]? ?匹配指定字符組內的任意一個字符/^[ab]
?[^]? 匹配不在指定字符組內的任意一個字符
?()? ?子表達式
?|? ? 或者
?\? ? 轉義符
?~,!~ 匹配或不匹配的條件語句
?x{m}? x字符重復m次
?x{m,} x字符至少重復m次
?X{m,n} x字符至少重復m次但不起過n次(需指定參數-posix或--re-interval)
本文轉自 民工哥 51CTO博客,原文鏈接:http://blog.51cto.com/mingongge/1981142
總結
以上是生活随笔為你收集整理的Linux系统命令三剑客之 awk的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SElinux测试及排错
- 下一篇: CentOS7编译安装nginx-1.8