1. 程式人生 > 其它 >linux中 awk命令

linux中 awk命令

作用: 格式化文字 概要 1 語法格式
  • awk 引數 處理規則 檔案路徑
2 引數
  • -F
3 awk的生命週期 4 awk中的預定義變數
  • $0
  • $n
  • NF
  • NR
  • FS
  • OFS
5 awk處理規則的執行流程
  • 從上到下,至少1個
    • BEGIN{}
    • //
    • {}
    • END{}
6awk中的函式
  • print
    • 列印
  • prinf
    • 格式化列印
    • 用到變數
      • 列印分隔符 OFS
    • 用到字元
      • %s: 字串
      • %d:數字
      • -:左對齊
      • +:右對齊
      • 15: 至少佔用15字元
7 awk的定位 8 流程控制 ===== 操作演示 ===== ------- 2 引數 ------- -F : 指定文字以xxx為分隔符(預設是以空格作為分隔符) 本語句結果: 列印以xxx為分隔符的最後一列 涉及知識點: $非零數字: 指代第幾列 NF含義:見下面 案例 分析 1 分析系統使用者解析器規律 發現: 1)是每行的最後一列 2)前面是冒號 2 解答 -------------------- 4 awk 中 預定義變數 -------------------- $0 代表當前行 awk '{print $0, "---"}' /etc/passwd $n 代表第n列(n非零) awk -F: '{print $1}' 檔案路徑 NF 以xxx為分隔符,統計當前行的欄位數 那麼$NF $NF NR
  • 用來記錄文字行號
FS
  • 指定文字內容分隔符(預設是空格)
    • 優先順序要高於 引數-F
OFS
  • 指定列印分隔符
--------------- 6awk中的函式 --------------- printf 格式化列印
  • %s: 字串
  • %d:數字
  • -:左對齊
  • +:右對齊
  • 15: 至少佔用15字元
以xxx為分隔符,格式化列印文字內容 以冒號為指定分隔符, 格式化列印 /etc/passwd 中最後一列 第一列內容 以冒號為指定分隔符, 格式化列印 /etc/passwd 中最後一列 第一列內容 ------------- 7 awk的定位 ------------- 格式
  • awk -F指定的分隔符 '定位{print $0}' /etc/passwd
    • 或 awk '定位{print $0}' /etc/passwd
7.1 正則定位 7.2 比較表示式(數字才能比較)
  • >
  • <
  • >=
  • <=
  • ~包含(用於正則匹配)
  • !~包含(用於正則匹配)
案例:要求列印屬組ID大於屬主ID的行 思路:屬組 屬主ID分別哪一列 案例:結尾包含bash的行打印出來 案例:結尾不包含bash的行打印出來
  • [root@localhost ~]# awk -F: '$NF !~ /bash/{print $0}' /etc/passwd
7.3邏輯表示式
  • &&: 邏輯與
  • || :邏輯或
  • ! :邏輯非
邏輯與 邏輯或
  • [root@localhost ~]# awk -F: '$3 + $4 > 2000 || $3 * $4 > 2000{print $0}' /etc/passwd
邏輯非 7.4 算數表示式
  • +
  • -
  • *
  • /
  • %
案例要求屬組 + 屬主的ID 小於 20 分析: 屬組和屬主所在列對應值之和小於20 $3 即取第3列對應的值 案例要求列印偶數行 案例要求列印奇數行 7.5 條件表示式
  • ==
  • >
  • <
  • >=
  • <=
案例:要求列印第三行 7.6範圍表示式 ----------- 8 流程控制(僅用於迴圈中) ----------- if
  • if(){} 單分支
  • if(){}else{} 雙分支
  • if(){}else if(){}else{} 多分支
for 格式 for(i="初始值";條件判斷;遊標){} 題目: 列印前3行 解答 while
  • while(條件判斷){}