awk ' {if(1>0){printf "helloworld\n"}}'
執行後無輸出,類似卡住。
awk **預設從標準輸入 (stdin) 讀取資料**,逐行處理。無輸入流時會**等待使用者輸入** (類似 cat 無參數),因此看似卡住。
echo "dummy" | awk '{if(1>0) printf "helloworld\n"}'
# 輸出: helloworld
awk '{if(1>0) printf "helloworld\n"}' /etc/passwd
# 對每一行輸出 helloworld
awk 'BEGIN {if(1>0) printf "helloworld\n"}'
# 立即輸出 helloworld,不讀取輸入
BEGIN { ... } # 1. 無輸入前執行一次
/pattern/ { ... } # 2. 每行匹配 pattern 執行
{ ... } # 3. 每行皆執行 (無 pattern)
END { ... } # 4. 所有輸入處理完執行
| 需求 | 寫法 |
|---|---|
| 單次運算/初始化 | BEGIN { ... } |
| 處理每行資料 | { ... } 或 /pattern/ { ... } |
| 最終統計/輸出 | END { ... } |
| 無輸入單次執行 | awk 'BEGIN { ... }' 或 echo "" | awk '{ ... }' |
理解 awk 需輸入流驅動,善用 BEGIN 區塊進行無輸入運算,即可避免「卡住」困擾。