簡介
- awk是一個數據處理工具,相比於sed常常作用於一整行的處理,awk則比較傾向於將一行分成數個”字段“來處理
- awk的流程是依次讀取每一行數據,讀取完一行數據后,進行條件判斷,如果滿足條件,就執行該條件對應的動作,沒有條件直接執行動作
- 其中文件名為$0,剩下的每一列依次為$1\$2...,判斷完一行后,繼續判斷下一行,直到知道文件全部判斷完
- 對比cut而言,awk可以對以空格為分隔符進行操作;可以進行條件判斷;另外字符截取針對有固定分隔符或者有規律的分隔符推薦使用cut命令
awk
命令格式
awk '條件1{動作1}條件2{動作2}...' 文件名
條件
- 一般使用關系表達式作為條件
- x > 10判斷變量x是否大於10
- x > =10大於等於
- x <= 10小於等於
動作
- 格式化輸出printf
- 流程控制語句if…do…done
例子
awk '{printf $2 "\t" $3 "\n"}' zifu1.text
例子-任務
任務:獲取指定系統已用硬盤空間百分比
命令:
- df -h:查看磁盤磁盤占用空間
- df -h | grep "/dev/sda":查看/dev/sda文件系統的磁盤占用空間
- df -h | grep "/dev/sda" | awk '{print $5}':顯示/dev/sda文件系統的磁盤占用空間,只顯示已用那一列的數據
- df -h | grep "/dev/sda" | awk '{print $5}' | cut -d "%" -f 1:顯示/dev/sda文件系統的磁盤占用空間,只顯示已用那一列的數據,不要百分比,只保留數字
BEGIN
- awk動作執行前操作,第一行顯示或運行
- df -h | grep "/dev/sda" | awk 'BEGIN{print "這是sda已用空間"}{print $5}'
END
- awk動作執行后的操作,最后一行顯示或運行
- df -h | grep "/dev/sda" | awk 'END{print "這是sda已用空間"}{print $5}'
FS內置變量
- awk分隔符默認TAB制表符以及空格,如果我們要指定分隔符就需要用到FS內置變量
- FS內置變量放在BEGIN里面
- #例子
- cat /etc/passwd | grep /bin/bash | awk '{FS=":"}{print $1 "\t" $3}'
- cat /etc/passwd | grep /bin/bash | awk 'BEGIN{FS=":"}{print $1 "\t" $3}
關系運算符
任務:打印成績好的學生姓名
命令:
- cat zifu1.text | grep -v "name" | awk '$4>60{print $2}'
- 或
- cat zifu1.text | grep -v "name" \ 命令太長時,用換行符下划線\,切到下一行繼續寫
- #> | awk '$4>70{print $2}'