溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux awk的用法介紹

發布時間:2021-09-10 18:49:13 來源:億速云 閱讀:169 作者:chen 欄目:大數據
# Linux awk的用法介紹

## 一、awk簡介

awk是一種強大的文本處理工具,由Alfred Aho、Peter Weinberger和Brian Kernighan在1977年開發(名稱取自三人姓氏首字母)。它不僅是Linux/Unix系統中的標準工具,更是一門完整的**模式掃描與處理語言**,擅長:
- 結構化文本分析
- 數據提取與轉換
- 報表生成
- 數學運算

## 二、基本語法結構

```bash
awk 'pattern {action}' input_file

核心組成部分

  1. 模式(Pattern)

    • 正則表達式 /regex/
    • 關系表達式 $1 > 100
    • 特殊模式 BEGIN/END
  2. 動作(Action)

    • {} 包裹的語句塊
    • 包含打印、計算、流程控制等操作

執行流程

  1. 自動逐行讀取輸入
  2. 按字段分割(默認以空格/TAB分隔)
  3. 檢查是否匹配模式
  4. 執行對應動作

三、常用內置變量

變量 描述 示例
$0 整行內容 awk '{print $0}'
$1-$n 第n個字段 awk '{print $3}'
NF 當前行的字段數 awk '{print NF}'
NR 當前行號(所有文件累計) awk '{print NR}'
FNR 當前文件的行號(多文件獨立計數) awk '{print FNR}'
FS 輸入字段分隔符(默認空格) BEGIN{FS=":"}
OFS 輸出字段分隔符(默認空格) BEGIN{OFS="-"}

四、實戰用例

1. 基礎數據提取

# 提取passwd文件的用戶名(第1列)
awk -F: '{print $1}' /etc/passwd

# 顯示文件第5-10行
awk 'NR>=5 && NR<=10' filename

2. 數學計算

# 計算CSV文件第3列總和
awk -F, '{sum+=$3} END{print sum}' data.csv

# 求平均值
awk '{sum+=$1} END{print sum/NR}' numbers.txt

3. 條件過濾

# 篩選內存使用超過1GB的進程
ps aux | awk '$6 > 1024*1024 {print $0}'

# 找出訪問量前5的IP(Apache日志)
awk '{ip[$1]++} END{for(i in ip) print ip[i],i}' access.log | sort -nr | head -5

4. 字段重組

# 調換前兩列位置
awk '{print $2, $1}' data.txt

# 添加行號并格式化輸出
awk '{printf "%5d | %-20s | %.2f\n", NR, $1, $3}' sales.dat

五、高級技巧

1. 數組處理

# 統計單詞頻率
awk '{for(i=1;i<=NF;i++) words[$i]++} END{for(w in words) print w,words[w]}' text.txt

2. 自定義函數

awk '
function myfunc(x) {
    return x*2
}
{print myfunc($1)}
' input.txt

3. 多文件處理

# 比較兩個文件的差異
awk 'NR==FNR{a[$0];next} !($0 in a)' file1.txt file2.txt

4. 正則匹配

# 提取含error的行(不區分大小寫)
awk '/[Ee][Rr][Rr][Oo][Rr]/' logfile

# 匹配以數字結尾的行
awk '/[0-9]$/' data.txt

六、性能優化建議

  1. 減少管道操作:盡量在awk內完成復雜處理 “`bash

    不良實踐

    cat file | grep “pattern” | awk ‘{print $1}’

# 優化方案 awk ‘/pattern/{print $1}’ file


2. **預編譯正則**:對重復使用的正則進行預編譯
   ```bash
   awk '/static_regex/{...}'  # 每次重新編譯
   awk '$0 ~ "static_regex"{...}'  # 預編譯模式
  1. 使用內置函數:如gsub()比外部sed更快

七、與sed/grep對比

工具 優勢場景 局限性
grep 快速行級匹配 無法進行字段級處理
sed 流編輯/替換 數學計算能力弱
awk 字段處理、復雜計算、報表生成 學習曲線較陡峭

結語

awk作為文本處理的”瑞士軍刀”,其價值隨著數據復雜度的提升而顯著增長。建議通過以下路徑進階學習: 1. 掌握基礎字段操作 2. 熟練使用內置變量 3. 理解數組和流程控制 4. 最終實現完整的awk腳本開發

附:常用速查表

> # 打印第3列大于50的行
> awk '$3>50'
> 
> # 自定義輸出分隔符
> awk 'BEGIN{OFS="|"} {print $1,$3}'
> 
> # 多條件組合
> awk '/start/,/end/'
> ```

注:本文實際約1200字,可根據需要增減示例或調整詳細程度。建議通過man awk查看系統完整文檔獲取更多細節。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女