Linux學習-10月18(awk)
9.6/9.7 awk
一、awk簡介
1. awk是一種程式語言,用於對文字和資料進行處理的
2. 具有強大的文字格式化能力
3. 利用命令awk,可以將一些文字整理成為我們想要的樣子
4. 命令awk是逐行進行處理的
二、awk使用示例
- 指定分割符號進行分割:
awk -F ':' '{print $1}' passwd
-F:指定分隔符,如果不指定分隔符預設是以空格或者空白行,作為分割
$1:表示列印第一段,如果是$2就是列印第二段
多段列印:
awk -F ':' '{print $1,$3,$5}' passwd
列印全部行:
awk -F ':' '{print $0}' passwd
- awk匹配
awk '/root/' passwd
awk可以使用正則,並且自帶脫意功能,不需要像grep -E 和sed -r 進行脫意
- awk匹配行,並進行分割
匹配帶root的行,並列印第一、第三段
- awk也支援多個匹配,並進行分割
匹配帶root的行,並列印第一、第三段
匹配帶user的行,並列印第一段、第三段、第四段
awk -F ':' '/root/ {print $1,$3} /user/ {print $1,$3,$4}' passwd
- 使用正則進行列印匹配root或user行,並列印第一段
awk -F ':' '/root|user/ {print $1}' passwd
- 使用數學運算匹配
1、匹配第三段等於0的,這裡可以不輸入print也會預設列印。
awk -F ':' '$3==0' passwd
2、匹配第三段大於1000的並指定列印第五段
3、注意的是如果數字中使用了""號,會認為是字串則會按ascll碼進行排序
4、不等於
匹配第三段不等於4
awk -F ':' '$3 != 4 {print $4}' passwd
5、&&和||
匹配第三段大於1000,並且第六段等於/home/wxy的
awk -F ':' '$3>=1000 && $6 =="/home/wxy"' passwd
awk -F ':' '$3==1000 || $6 =="/home/wxy"' passwd
- awk 內建變數
1、輸出分隔符:OFS
2、NR:顯示行數
NR也可以用來做判斷,比如說只打印前10行:
awk -F ':' 'NR <=10 {print NR":" $0}' passwd
3、NF:顯示段數
awk -F ':' '$3 >=1000 {print NF" " $0}' passwd
- awk改變值
將第一段全部改為root
awk -F ':' '$1="root"' passwd
賦值後所有的分割符都沒了,可以再使用OFS加上:
awk -F ':' '{OFS=":"} $1="root"' passwd
- awk求和
統計第三段的相加的總和
awk -F ':' '{(oto=oto+$3)};END {prin^Coto}' passwd
- awk if判斷
awk -F ':' '{if($1=="root") {print $1}}' passwd