awk學習筆記 17 其他函式

2021-09-20 20:08:46 字數 2730 閱讀 5969

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秒 cst 

0 說明:

上面輸出的第一行是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 

[email protected] 

李四 13811111111 

[email protected] 

說明: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 ...