awk
awk是一種處理文本的語言,是一個強大的文本分析工具,awk是以列為劃分記數的,$0表示所有列,$1表示第一列,$2表示第二列。
awk常用參數
- -F指定輸入文件分隔符,如-F:
- -v 賦值一個用戶定義變量,如-va=1
- -f 從腳本文件中讀取awk命令
多個分隔符
awk -F '[-|]' '{print $3}' data
上面這個例子是以-和|為分隔符進行分割。
設置變量
設置awk自定義變量,使用參數-v
cat data.txt | awk -v a=9 '{print $1,$1+a}'
如上,設置了變量a的值,在輸出的時候添加一個$1+a的值。
邏輯判斷
cat data.txt | awk '$1=="reworth" {print}
輸出第一列為reworth的所有行。
cat data.txt | awk '$1!="reworth" {print}'
輸出第一列不是reworth的所有行。
正則匹配
cat data.txt | awk '$2 ~ /reworth.*/ {print}'
匹配第二列中以reworth開頭的所有行。對某列進行匹配時需要在列之后加個~表示進行匹配。
cat data.txt | awk '/reworth.*/ {print}'
匹配以reworth開頭的所有行。
匹配取反 !~
cat data.txt | awk '$2 !~ /reworth/ {print}'
匹配第二列不是reworth的所有行。
內置變量
- FILENAME : 當前輸入文件名稱
- NF : 當前輸入行的字段編號
- OFS : 輸出字段分隔符
- NR : 當前輸入行編號(是指輸入行 1,2,3……等)
- FS : 輸入字段分隔符
- ORS : 輸出記錄分隔符
- RS : 輸入記錄分隔符
內置函數
substr字符串截取
cat data.txt | awk '{print substr($1,1,4)}'
截取第一列中的第一個到第四個字符。
split 切片
cat data.txt |awk '{split($1,a,",");print a[1],a[2],a[3]}'
以逗號分隔第一列,并輸出分隔后的數據。
gsub 替換
cat data.txt | awk ''{gsub("abc","asd",$2);print}
將第二列中的abc替換成asd
統計
grep 'tower_activity_op' /data/s*/log/test.log | awk -F'[=,]' '{a[$2] -= $12; b[$2] -= $14; item_count[$2]++;} END{for(i in a) {serverid=i; cmd="/usr/bin/mysql -u root -h "192.168.0.1" -p1234 -D stat -e "replace into test(date,uid,cash,coins,number,code,serverid) values(\047'$Date'\047,"i","a[i]","b[i]","item_count[i]",\047測試\047,"serverid")""; system(cmd);}}'