Shell系列(22)- 字符截取命令awk


簡介

  • 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}'

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM