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)
本文出自 “民工哥博客” 博客,請務必保留此出處http://mingongge.blog.51cto.com/2429897/1981142
Linux系統命令三劍客之 awk