awk的內建函式不多,除去數學和字串的都歸到其他類了。如下表:
函式說明
close( expression )
用同乙個帶字串值的 expression 引數來關閉由 print 或 printf 語句開啟的或呼叫 getline 函式開啟的檔案或管道。如果檔案或管道成功關閉,則返回 0;其它情況下返回非零值。如果打算寫乙個檔案,並稍後在同乙個程式中讀取檔案,則 close 語句是必需的。
system(command )
執行 command 引數指定的命令,並返回退出狀態。等同於system子例程。
expression | getline [ variable ]
從來自 expression 引數指定的命令的輸出中通過管道傳送的流中讀取乙個輸入記錄,並將該記錄的值指定給 variable 引數指定的變數。如果當前未開啟將 expression 引數的值作為其命令名稱的流,則建立流。建立的流等同於呼叫popen子例程,此時 command 引數取 expression 引數的值且 mode 引數設定為乙個是 r 的值。只要流保留開啟且 expression 引數求得同乙個字串,則對 getline 函式的每次後續呼叫讀取另乙個記錄。如果未指定 variable 引數,則 $0 記錄變數和 nf 特殊變數設定為從流讀取的記錄。
getline [ variable ] < expression
從 expression 引數指定的檔案讀取輸入的下乙個記錄,並將 variable 引數指定的變數設定為該記錄的值。只要流保留開啟且 expression 引數對同乙個字串求值,則對 getline 函式的每次後續呼叫讀取另乙個記錄。如果未指定 variable 引數,則 $0 記錄變數和 nf 特殊變數設定為從流讀取的記錄。
getline [ variable ]
將 variable 引數指定的變數設定為從當前輸入檔案讀取的下乙個輸入記錄。如果未指定 variable 引數,則 $0 記錄變數設定為該記錄的值,還將設定 nf、nr 和 fnr 特殊變數。
下面舉例說明:
1.close
該函式用於關閉輸入輸出檔案,下面看兩個例子,注意區別:
1)這是不帶close的例子
先執行:
sudo awk'begin'
再執行:
cat date.txt輸出:
2023年11月abc
說明:由於沒有關閉之前的date.txt檔案,後面的內容會追加寫入到date.txt中。
2)帶有close的例子
先執行:
sudo awk'begin'
再執行:
cat date.txt輸出:
abc說明:由於中間關閉了檔案,後一次寫入就覆蓋了前一次寫入的內容。
2.system
該函式用於執行系統命令
awk'begin'
輸出:
2023年11月 8日 星期四 11時09分35秒 cst0 說明:
上面輸出的第一行是date命令的執行結果,第二行是system的執行結果
3.getline
該函式用於輸入。有三種用法:
1)通過管道符輸入
awk'begin'
輸出:
2023年11月 8日 星期四 11時13分07秒 cst說明:上面的程式指定了乙個變數var來存放getline的結果,如果沒有指定,將預設為$0。如下:
awk'begin'
輸出:
2023年11月 8日 星期四 11時19分02秒 cst當然,如果是要輸出某一列,可以用$n,如果是輸出整行,$0也是可以省略的。
2)通過檔案流輸入
awk'begin;close("address.dat")}'
輸出:
張三13512345678
李四 13811111111
說明:getline從檔案流中讀取每一行並輸出。
3)從命令列輸入
awk'begin'
輸出:
enter your name:dddd
dddd
說明:第二行是使用者的輸入,第三行是程式的執行輸出。getline接收了當前使用者的輸入,並在其後輸出。
總結:
至此,awk的學習筆記算是結束了,對於**類的資料,如日誌,csv等,用awk可以很方便的處理。目前用得比較多的是將excel匯出的資料用awk整理成sql再通過命令列匯入到庫,在資料量較大時,這種處理會比直接匯入excel要快得多。順便說一下,學習完一門技術如果不用很快就會忘記的,多用才是王道,共勉。
AWK學習筆記八 AWK內建函式
執行作業系統命令然後返回給awk函式,system函式執行string指定的命令,返回執行命令返回的狀態作為它的值。比如下面 段 end系統管理員在awk程式完成處理輸入之後,會傳送email。awk程式被廣泛用來處理含有時間戳的log檔案,表明什麼時候乙個log記錄被寫入。systime 這個函式...
awk學習筆記
單詞計數 cat filename awk end 排序演算法 bin bash function f while n 1 do f 1 shift done wait 顯示特殊符 var i am a student echo var awk 結果為 am a i student echo var...
awk學習筆記
1 將第一列重複的元素去掉,只保留第乙個 root centos awk test cat sed u.txt haha 1 nihao 1 haha 3 hehe 4 heihei 5 heihei 6 1 haha 1 heihei root centos awk test awk f a 1 ...