awk的內建字串函式
1. 格式化輸出print和printf
// 和c語言風格一致,-表示左對齊,預設是右對齊;%s字元型,%d十進位制數值型,%f浮點型
[root@mysql-master ~]# awk -f":" '' /tmp/file1
username: root uid: 0
username: bin uid: 1
username: daemon uid: 2
[root@mysql-master ~]#
[root@mysql-master ~]# awk -f":" '' /tmp/file1
root 0
bin 1
daemon 2
[root@mysql-master ~]#
2. 正規表示式[root@mysql-master ~]# awk '/^root/' /tmp/file1
root:x:0:0:root:/root:/bin/bash
[root@mysql-master ~]# awk '$0 ~ /^root/' /tmp/file1 # 與上面等價,~表示匹配
root:x:0:0:root:/root:/bin/bash
[root@mysql-master ~]#
[root@mysql-master ~]# awk '!/^root/' /tmp/file1
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@mysql-master ~]# awk '$0 !~ /^root/' /tmp/file1 # 與上面等價,!~表示不匹配
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@mysql-master ~]# awk '$nf!~/bash/' /tmp/file1 #篩選shell不是bash的使用者
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@mysql-master ~]#
3. 關係運算子及其他運算子
運算子說明
運算子說明
丨丨 , &&
邏輯或=,+=,-+,*=,/=,%=
賦值,運算
丨按位與
<=,>=,<,>
小於等於,大於等於,小於,大於
^按位異或
<<,>>
按位左移,按位右移
&按位與
+,-,*,/,%
加減乘除取模
==,!=
等於,不等於
!,~邏輯非,按位取反或補碼
其他運算子說明$
字段引用
空格字串連線符
?:c語言中條件表示式
in陣列中是否存在某鍵值
例:
[root@mysql-master ~]# awk 'begin'
ok[root@mysql-master ~]# awk 'begin'
1[root@mysql-master ~]# awk 'begin'
0[root@mysql-master ~]#
[root@mysql-master ~]# awk -f":" ' end }' /tmp/file1
0 root
1 bin
2 daemon
[root@mysql-master ~]# awk -f":" ' end end}' /etc/passwd
/bin/sync 1
/bin/bash 4
/sbin/nologin 17
/sbin/halt 1
/sbin/shutdown 1
[root@mysql-master ~]#
[root@mysql-master /soft/scripts]# ss -an |grep 80 |awk ' end}'
listen 31
estab 84
[root@mysql-master /soft/scripts]# sh tcp_status.sh
estab: 84
listen: 31
[root@mysql-master /soft/scripts]#
例4:對訪問ip的top10進行排序ss -ant |grep ':80' |awk -f":" '!/listen/ end}'|sort -k2 -rn|head -10
例5:統計nginx某一天的pv量《統計日誌》
[root@web-node2 ~]# grep '22/oct/2018' /var/log/nginx/access.log|wc -l
55 # nginx某一天的pv量
[root@web-node2 ~]# grep '22/oct/2018' | awk ' end}' /var/log/nginx/access.log-20181107
192.168.1.100訪問次數:36
192.168.1.10訪問次數:1
[root@web-node2 ~]# awk '/22\/oct\/2018/ end}' /var/log/nginx/access.log-20181107
192.168.1.100訪問次數:36
192.168.1.10訪問次數:1
[root@web-node2 ~]# awk '/22\/oct\/2018/ end}' /var/log/nginx/access.log-20181107 |sort -k2 -rn -t":"|head -10
192.168.1.100訪問次數: 36
192.168.1.10訪問次數: 1
## 還是先用grep方便點,不用轉義的
格式
描述gsub( ere, repl, [ in ] )
除了正規表示式所有具體值被替代這點,它和 sub 函式完全一樣地執行。
sub( ere, repl, [ in ] )
用 repl 引數指定的字串替換 in 引數指定的字串中的由 ere 引數指定的擴充套件正規表示式的第乙個具體值。sub 函式返回替換的數量。出現在 repl 引數指定的字串中的 &(和符號)由 in 引數指定的與 ere 引數的指定的擴充套件正規表示式匹配的字串替換。如果未指定 in 引數,預設值是整個記錄($0 記錄變數)。
index( string1, string2 )
在由 string1 引數指定的字串(其中有出現 string2 指定的引數)中,返回位置,從 1 開始編號。如果 string2 引數不在 string1 引數中出現,則返回 0(零)。
length [(string)]
返回 string 引數指定的字串的長度(字元形式)。如果未給出 string 引數,則返回整個記錄的長度($0 記錄變數)。
例1:gsub,sub使用
#在 info中查詢滿足正規表示式,/[0-9]+/ 用」」替換,並且替換後的值,賦值給info 未給info值,預設是$0
[root@mysql-master ~]# awk 'begin'
this is a test--aaaa!
例2:查詢字串(index使用)[root@mysql-master ~]# awk 'begin'
no found
例3:awk使用外部變數的三種方法方法1. 在雙引號的情況下
[root@mysql-master ~]# echo "lss linux" |awk "gsub(/lss/,\"$user\")"
root linux
方法2. 在單引號的情況下
[root@mysql-master ~]# echo "lss linux" |awk 'gsub(/lss/,"'"$user"'")'
root linux
# 列印出磁碟佔用率大於10%的掛載點
[root@mysql-master ~]# df -h |awk '}'
/:12%
/boot:13%
[root@mysql-master ~]# echo "lss linux" |awk -v user=root 'gsub(/lss/,user)'
root linux
[root@mysql-master ~]# echo "lss linux" |awk -v user=root "gsub(/lss/,user)"
root linux
字串及字串的方法
一 字串 js中的任何資料型別都可以當作物件來看。所以string既是基本資料型別,又是物件。二 宣告字串 var sstr 字串 var ostr new string 字串 三 字串屬性 1.length計算字串的長度 不區分中英文 var str hello world console.log...
Lua學習之字串函式及模式匹配
對於簡單的函式,我只是將其以舉例的方式羅列一下,對於一些功能較多的函式,會舉例分析一下,並簡單總結,全文以舉例為驅動。一,字元類基礎函式舉例介紹 string.len string string.lower string string.upper string string.rep a 5 aaaa...
Lua學習筆記之字串及模式匹配
string.len string string.lower string string.upper string string.rep a 5 aaaaa string.sub string i j string.sub s,string.find s,world string.sub函式會提取子...