Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux awk 內建函數大全:算術、字串、時間、I/O 與系統操作函數完整參考

編輯:Linux 教學

awk 內建函數涵蓋數學運算、字串處理、時間格式化、檔案/管線 I/O 及系統呼叫,掌握它們能大幅簡化腳本邏輯。

一、算術函數 (同 C 語言 math.h)

函數說明
atan2(y,x)y/x 反正切
cos(x), sin(x)余弦/正弦 (弧度制)
exp(x)e^x 指數函數
log(x)自然對數 ln(x)
sqrt(x)平方根
int(x)截斷取整 (向零取整)
rand()0~1 均勻亂數
srand([x])設定亂數種子,返回前一種子
awk 'BEGIN{OFMT="%.3f"; print sin(1), exp(10), log(10), int(3.1415)}'
# 0.841 22026.466 2.303 3
awk 'BEGIN{srand(); print int(100*rand())}'  # 0-99 隨機整數

二、字串函數

函數說明關鍵行為
gsub(ere, repl, [in])全域替換返回替換次數,& 代表匹配串
sub(ere, repl, [in])首次替換返回 0/1,修改 in (預設 $0)
index(s1, s2)子字串位置1-based,未找到回 0
length([s])字串/記錄長度字符數,非位元組
substr(s, m, [n])截取子字串m 從 1 起,省 n 截至尾
match(s, ere)正則匹配位置設定 RSTART/RLENGTH
split(s, arr, [ere])分割到陣列返回元素數,預設 FS 分割
tolower(s), toupper(s)大小寫轉換受 LC_CTYPE 影響
sprintf(fmt, ...)格式化字串同 printf 但返回字串

字串函數實戰

# 全域替換數字為 !
awk 'BEGIN{s="test2010test"; gsub(/[0-9]+/,"!",s); print s}'  # test!test!

# 正則匹配位置長度
awk 'BEGIN{s="test2010"; match(s,/[0-9]+/); print RSTART, RLENGTH}'  # 5 4

# 格式化輸出
awk 'BEGIN{printf "%.2f, %X, %o\n", 124.113, 124, 124}'  # 124.11, 7C, 174

三、一般 I/O 與系統函數

函數說明
close(expr)關閉檔案/管線,成功回 0
system(cmd)執行 shell 指令,返回退出碼
expr | getline [var]從管線讀取一行
getline [var] < expr從檔案讀取一行
getline [var]從 stdin/當前檔讀取

I/O 實戰

# 逐行讀取 /etc/passwd
awk 'BEGIN{while((getline < "/etc/passwd") > 0) print $1; close("/etc/passwd")}'

# 管線讀取命令輸出
awk 'BEGIN{while("ls -l" | getline) print $9; close("ls -l")}'

# 互動式讀取
awk 'BEGIN{print "Name:"; getline name; print "Hello " name}'

# 呼叫外部程式
awk 'BEGIN{ret=system("ls -l"); print "exit code:" ret}'

四、時間函數 (gawk 4.1+)

函數說明
systime()Unix 時間戳 (1970 秒數)
mktime("YYYY MM DD HH MM SS")建構時間戳
strftime([fmt[, ts]])格式化時間輸出

常用 strftime 格式

%Y %m %d %H %M %S  年月日時分秒
%F  %T               等同 %Y-%m-%d %H:%M:%S
%a %A                週幾縮寫/全名
%b %B                月份縮寫/全名
%j                   年內天數 (001-366)
%z %Z                時區偏移/名稱
%%                   字面 %

時間運算範例

awk 'BEGIN{
    t1=mktime("2023 01 01 00 00 00")
    t2=systime()
    print "距今秒數:", t2-t1
    print "格式化:", strftime("%F %T", t1)
}'

五、格式化字串 sprintf/printf 格式符

符號輸出型別
%d %i有號十進位整數
%u無號十進位整數
%f浮點數
%e %E科學記號
%g %G自動選擇 %f/%e
%s字串
%c單一字符
%x %X十六進位
%o八進位
%p指標位址

修飾:%5d 寬度、%.2f 精度、%-10s 左對齊、%05d 零填充。


內建函數是 awk 表達力的核心,熟記上表分類與高頻函數簽名,遇到字串切分、時間計算、亂數產生、外部命令整合等場景即可信手拈來。

Copyright © Windows教程網 All Rights Reserved