Linux學習總結(二十一)正則三劍客之awk
1.截取文檔中的某段
awk -F ‘:‘ ‘{print $1}‘ /etc/passwd |head -2
-F 指定分割符,不指定以空格或者tab為分隔符
print 為打印動作
$1 為第一字段, $2 為第二字段,依次類推,$0標示整行
那麽打印整個文檔就是awk ‘{print $0}‘ /etc/passwd
print 還可以打印自定義的內容,要用雙引號括起來awk -F‘:‘ ‘{print $1"#"$2"#"$3"#"$4}‘ /etc/passwd |head -2
意思是以冒號分割打印前四段,每段用#號分開
2.匹配字符或字符串
awk ‘/root/‘ /etc/passwd
讓某個字段去匹配
awk -F ‘:‘ ‘$1 ~/da/‘ /etc/passwd
awk還可以多次匹配,只打印所匹配的段
awk -F ‘:‘ ‘/root/ {print $1 $3} /test/ {print $1 $3}‘ /etc/passwd
意思是先找出帶有關鍵詞root ,test的行,再打印出這些行指定的字段
3.條件操作符
根據邏輯判斷篩選 比如==,<,<=,>,>=,!=awk -F ‘:‘ ‘$3==0‘ /etc/passwd
awk -F ‘:‘ ‘$3>=500‘ /etc/passwd 這樣我們就篩選出了普通用戶
邏輯符號後面的數字如果用雙引號引起來,則按照字符處理
awk -F ‘:‘ ‘$7!="/sbin/nologin"‘ /etc/passwd
當然我們也可以根據字段處理
awk -F ‘:‘ ‘$3<$4‘ /etc/passwd
另外還可以使用 && 和 || 表示 “並且” 和 “或者” 的意思
awk -F ‘:‘ ‘$3<$4 && $3<10‘ /etc/passwd
awk -F ‘:‘ ‘$3>=500 || $3<1‘ /etc/passwd
4.awk內置變量
NF :用分隔符分隔後一共有多少段
NR :行數awk -F ‘:‘ ‘{print NF}‘ /etc/passwd |head -3
awk -F ‘:‘ ‘{print NR}‘ /etc/passwd |head -3
用行號作為判斷條件曬篩選,也可以同時匹配某段字符
awk ‘"NR">20‘ /etc/passwd
awk -F ‘:‘ ‘NR>20 && $1~/test/‘ /etc/passwd
5.awk 中的數學運算
更改某字段的內容輸出awk -F ‘:‘ ‘$1="root"‘ /etc/passwd |head -3
以冒號分割,將第一段替換為root
awk還可以對各個段的值進行數學運算:awk -F ‘:‘ ‘{$7=$3+$4;print $0}‘ /etc/passwd |head -3
該語句標示將第三段和第四段求和後替換第七段
還可以計算某一列的和head -3 /etc/passwd |awk -F ‘:‘ ‘{(sum=sum+$3)}; END {print sum}‘
這裏我們選了文件前三行,統計了以冒號分割的第三列數字之和,sum是變量可以任意取,END是關鍵詞類似shell腳本的done ,其實該命令已經相當於一個帶有循環語句的簡單腳本了
在awk中使用if判斷,for循環都可以,舉一個if例子
awk -F ‘:‘ ‘{if ($3>=500) print $0}‘ /etc/passwd
Linux學習總結(二十一)正則三劍客之awk