awk 提供正則比對、樣式裝載、流程控制、數學運算、進程控制、內建變數與函數,堪稱完整程式語言。處理文字速度驚人,許多 Shell 日誌分析工具皆可用 awk 實現。本文專講如何將外部變數傳入 awk 執行陳述句。
awk [ -F re] [parameter...] ['pattern {action}' ] [-f progfile] [in_file...]
兩個特殊樣式 BEGIN 與 END:BEGIN 區塊在掃描輸入前執行(初始化變數),END 區塊在掃描完所有輸入後執行(輸出結果)。
echo 'awk code' | awk 'BEGIN{print "start\n============="}{print $0}END{print "=========\nend"}'
start
=============
awk code
=========
end
test='awk code'
echo | awk '{print test}' test="$test"
awk code
格式:awk '{action}' 變數名=變數值,變數放在 '{action}' 之後。此法在 BEGIN 區塊無法取得值:
echo | awk 'BEGIN{print test}' test="$test"
# 無輸出
test='awk code'
echo | awk -v test="$test" 'BEGIN{print test}'
awk code
echo | awk -v test="$test" '{print test}'
awk code
格式:awk -v 變數名=變數值 [-v 變數2=值2 ...] 'BEGIN{action}'。-v 必須放在 action 之前。
awk 'BEGIN{for (i in ENVIRON) {print i"="ENVIRON[i];}}'
AWKPATH=.:/usr/share/awk
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
LANG=en_US.UTF-8
...
ENVIRON 為關聯陣列,環境變數名即鍵值,直接存取無需額外傳遞。
| 方法 | 語法位置 | BEGIN 可用 | 適用場景 |
|---|---|---|---|
| 命令列賦值 | action 之後 | 否 | 簡單腳本、非 BEGIN 階段 |
| -v 參數 | action 之前 | 是 | 需在 BEGIN 初始化、多變數傳遞 |
| ENVIRON | 腳本內部直接用 | 是 | 讀取系統環境變數、無需外部傳遞 |
CentOS 6.5 使用 Yum 官方源安裝 Nginx 完整步驟
Linux 服務器安全基線配置清單:六大核心加固項目落地指南
Linux 進程終止命令大全:kill、killall、pkill、xkill 用法與信號機制詳解
Linux 網路連線故障診斷實戰:從 ifconfig 到路由表的分層排查法
CentOS 稱霸 Linux Web 伺服器市場深度分析:從 RHEL 克隆到佔有率 31.6% 的商業邏輯
Linux平台「爛尾」專有軟體盤點:QQ、Foxit、Picasa、Google Desktop、EVE Online