awk ''
awk有許多內建變數用來設定環境資訊,這些變數可以被改變,下面給出了最常用的一些變數。
argc 命令列引數個數此外,$0變數是指整條記錄。$1表示當前行的第乙個域,$2表示當前行的第二個域,......以此類推。ar** 命令列引數排列
environ 支援佇列中系統環境變數的使用
filename awk瀏覽的檔名
fnr 瀏覽檔案的記錄數
fs 設定輸入域分隔符,等價於命令列 -f選項nf 瀏覽記錄的域的個數nr 已讀的記錄數ofs 輸出域分隔符
ors 輸出記錄分隔符
rs 控制記錄分隔符
統計/etc/passwd:檔名,每行的行號,每行的列數,對應的完整行內容:
#awk -f ':' '' /etc/passwd
filename:/etc/passwd,linenumber:1,columns:7,linecontent:root:x:0:0:root:/root:/bin/bash
filename:/etc/passwd,linenumber:2,columns:7,linecontent:daemon:x:1:1:daemon:/usr/sbin:/bin/sh
filename:/etc/passwd,linenumber:3,columns:7,linecontent:bin:x:2:2:bin:/bin:/bin/sh
filename:/etc/passwd,linenumber:4,columns:7,linecontent:sys:x:3:3:sys:/dev:/bin/sh
使用printf替代print,可以讓**更加簡潔,易讀
awk -f ':' '' /etc/passwd
變數和賦值
除了awk的內建變數,awk還可以自定義變數。
下面統計/etc/passwd的賬戶人數
awk ' end' /etc/passwd
root:x:0:0:root:/root:/bin/bash
......
user count is 40
count是自定義變數。之前的action{}裡都是只有乙個print,其實print只是乙個語句,而action{}可以有多個語句,以;號隔開。
這裡沒有初始化count,雖然預設是0,但是妥當的做法還是初始化為0:
awk 'begin end' /etc/passwd
[start]user count is 0
root:x:0:0:root:/root:/bin/bash
...[end]user count is 40
統計某個資料夾下的檔案占用的位元組數,如果以m為單位顯示:
ls -l |awk 'begin end'
[end]size is 8.25889 m
注意,統計不包括資料夾的子目錄。
條件語句
if (expression)
if (expression) else
if (expression) else if (expression1) else
統計某個資料夾下的檔案占用的位元組數,過濾4096大小的檔案(一般都是資料夾):
ls -l |awk 'begin } end'
[end]size is 8.22339 m
迴圈語句
awk中的迴圈語句同樣借鑑於c語言,支援while、do/while、for、break、continue,這些關鍵字的語義和c語言中的語義完全相同。
Linux awk命令詳解
3.awk的執行過程 1 awk script的組成 awk script可以由一條或多條awk cmd組成,兩條awk cmd之間一般以newline分隔 awk cmd由兩部分組成 awk pattern awk script可以被分成多行書寫,必須確保整個awk script被單引號括起來。2...
linux awk命令學習
awk是一種功能很強大的程式語言,用於linux系統下文字和資料的處理。本篇文章只學習一些awk相關的常規應用,而不對awk的語法進行討論,如果有需要,直接查資料就好了。1.檢視特定程序的pid,sh ps pid tty time cmd 414 00 00 00 rcs 417 00 00 00...
linux awk命令詳解
awk 儘管操作可能會很複雜,但語法總是這樣,其中 pattern 表示 awk 在資料中查詢的內容,而 action 是在找到匹配內容時所執行的一系列命令。花括號 不需要在程式中始終出現,但它們用於根據特定的模式對一系列指令進行分組。pattern就是要表示的正規表示式,用斜槓括起來。awk 語言...