Linux運維 AWK介紹

2021-10-05 06:35:04 字數 2523 閱讀 7265

將 awk_script 放入指令碼檔案並以#!/bin/awk -f作為首行,給予該指令碼可執行許可權,然後在 shell 下通過鍵入該指令碼的指令碼名呼叫之。

將所有的 awk_script 插入乙個單獨指令碼檔案,然後呼叫: awk -f wak 指令碼檔案 input_file(s)

awk 的執行過程

(2) awk 命令的一般形式:

(3) awk 的執行過程:

(4) iput_file 可以是多於乙個檔案的檔案列表,awk 將按順序處理列表中的每個檔案。

(5) 一條 awk_cmd 的 awk_pattern 可以省略,省略時不對輸入記錄進行匹配比較就執行相應的 actions。一條 awk_cmd 的 actions 也可以省略,省略時預設的動作為列印當前輸入記錄(print $0) 。一條 awk_cmd 中的 awk_pattern 和 actions 不能同時省略。

(6) begin 區塊和 end 區塊別位於 awk_script 的開頭和結尾。awk_script 中只有 end 區塊或者只有 begin 區塊 是被允許的。如果 awk_script 中只有 begin ,awk 不會讀取 input_file。

(7) awk 把輸入檔案的資料讀入記憶體,然後操作記憶體中的輸入資料副本,awk 不會修改輸入檔案的內容。

(8) awk 的總是輸出到標準輸出,如果想讓 awk 輸出到檔案,可以使用重定向。

awk_pattern awk_pattern 模式部分決定 actions 動作部分何時觸發及觸發 actions。awk_pattern 可以是以下幾種型別:

② 舉例:awk '/ *\$0\.[0-9][0-9].*/' input_file

(2) 布林表示式用作 awk_pattern,表示式成立時,觸發相應的 actions 執行。

③ &&(與) 和 ||(或) 可以連線兩個/regexp/或者布林表示式,構成混合表示式。!(非) 可以用於布林表達 式或者/regexp/之前。

舉例:awk '($1 < 10 ) && ($2 > 10) ' input_file

awk '/^d/ || /x$/ ' input_file④ 其它表示式用作 awk_script,如賦值表示式等

awk '(tot+=$6); end' input_file // 分號不能省略

awk 'tot+=$6 end' input_file // 與上面等效

actions actions 就是對 awk 讀取的記錄資料進行的操作。actions 由一條或多條語句或者命令組成,語句、命令之間 用分號(;)分隔。actions 中還可以使用流程控制結構的語句。

(2) awk 的語句: awk 的語句主要是賦值語句,用來給變數賦值。

③ 為了方便書寫,awk 也支援 c 語言語法的賦值操作符:+= -= *= /= %= ^= ++ --

(3) 流程控制結構 (基本上是使用 c 語言的語法) 其中 condition 一般為布林表示式,body 和 else-body 是 awk 語句塊。

awk 的變數 在 awk_script 中的表示式中要經常使用變數。不要給變數加雙引號,那樣做,awk 將視之為字串。

awk 的變 量基本可以分為兩類:

② 字段變數($0 $1 $2 $3 …): 當 awk 把當前輸入記錄分段時,會對這些字段變數賦值。和內部變數類似, 在 awk 執行過程中欄位變數的值是動態變化的。不同的是,修改這些字段變數的值是有意義的,被修改的字段 值可以反映到 awk 的輸出中。 可以建立新的輸出字段,比如,當前輸入記錄被分割為 8 個字段,這時可以通過對變數 $9 (或$9 之後的 字段變數)賦值而增加輸出字段,nr 的值也將隨之變化。 字段變數支援變數名替換。

舉例:pwd |awk -f/ '' // print $nf 列印輸入記錄的最後乙個字段

awk '' input_file // 列印輸入記錄的第 2 個字段③ 其它內部變數: 可以修改這些變數。常見的有:

(2) 自定義變數

awk 的內建函式 可以在 awk_script 的任何地方使用 awk 函式。和 awk 變數一樣,awk 函式可以分為內建函式和自定義函式。

(2) 常見 awk 內建字串函式

複雜的 awk 常常可以使用自己定義的函式來簡化。呼叫自定義的函式與呼叫內建函式的方法一樣。

自定義函式定義的格式: 自定義函式可以在 awk 程式的任何地方定義。

function fun_name (parameter_list)

舉例:awk 'function squaresum(x,y) ' grade.txtawk 的陣列 陣列使用前,不必預先定義,也不必指定陣列元素個數。

Linux高階運維命令(awk)

awk是乙個強大的文字分析工具,相對於grep的查詢,sed的編輯,awk在其對資料分析並生成報告時,顯得尤為強大。簡單來說awk就是把檔案逐行的讀入,以空格為預設分隔符將每行切片,切開的部分再進行各種分析處理。awk有3個不同版本 awk nawk和gawk,未作特別說明,一般指gawk,gawk...

linux命令 awk(運維基本功)

日誌分析,資料統計,命令結果過濾。等等情況下,awk絕對是運維人的好幫手,它能讓你在龐大而又有規律的資料中過濾 統計出你想要的資料,熟練運用awk,你的工作效率一定會有很大的提公升 awk f分隔符 v 變數 值 begin end file1 file2 f 指定分割符,預設空格 如 f 以逗號分...

Linux系統運維之nfs介紹

全稱為 nework file system 網路檔案系統 通過網路儲存和組織檔案的一種方法或者機制 工作原理 1 硬體 用sas ssd硬碟,買多塊,硬體raid,製作raid5或者raid10,網絡卡的吞吐量要大,至少千兆以上 可多塊網絡卡 2 優化nfs伺服器端的配置 3 優化nfs客戶端掛載...