linux awk命令解析

2021-10-05 09:35:01 字數 2135 閱讀 1953

awk ''
awk有許多內建變數用來設定環境資訊,這些變數可以被改變,下面給出了最常用的一些變數。

argc               命令列引數個數

ar** 命令列引數排列

environ 支援佇列中系統環境變數的使用

filename awk瀏覽的檔名

fnr 瀏覽檔案的記錄數

fs 設定輸入域分隔符,等價於命令列 -f選項nf 瀏覽記錄的域的個數nr 已讀的記錄數ofs 輸出域分隔符

ors 輸出記錄分隔符

rs 控制記錄分隔符

此外,$0變數是指整條記錄。$1表示當前行的第乙個域,$2表示當前行的第二個域,......以此類推。

統計/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 語言...