awk指令
awk也是一個資料處理工具!相較於 sed 常常作用於一整行的處理, awk 則較傾向於一行當中分成數個字段來處理。
.awk語言的最基本功能是在文件或字串中基於指定規則來分解抽取信息,也可以基於指定的規則來輸出數據。
有三種方式呼叫awk
1.命令列方式
awk [-F field-separator] 'commands' input-files
其中,[-F域分隔符號]是可選的,因為awk使用空格或tab鍵作為缺省的域分隔符,因此如果要瀏覽域間有空格的文本,不必指定這個選項,如果要瀏覽諸如passwd文件,此文件各域以冒號作為分隔符,則必須指明-F選項,如:awk -F: 'commands' input -file。
註:在linux系統中用環境變數IFS儲存分隔符號,但根據實際應用也可以改變IFS的值.
例如:
腳本執行結果如下:
腳本執行結果如下:
腳本執行結果如下:指令, input-files 是待處理的檔案。
iput_files可以是多於一個檔案的檔案列表,awk會依序處理列表中的每個檔案。
在awk中,檔案的每一行中,由域分隔符號分開的每一項稱為一個域。通常,在不指名-F域分隔符號的情況下,預設的域分隔符號是空格或tab鍵。
2. shell腳本方式
將所有的Linux Shell中awk指令的用法插入一個文件,並使awk程式可執行,然後Linux Shell中awk指令的用法解釋器作為腳本的首行,以便透過鍵入腳本名稱來呼叫。
相當於shell腳本首行的:#!/bin/sh可以換成:#!/bin/awk
3.將所有的awk指令插入一個單獨文件,然後呼叫:
Awk -f awk-script-file input-files
其中,-ffilefk-script-ffilef是一樣的。
awk的模式和動作
任何awk語句都由模式和動作組成(awk_pattern { actions })。
在一個awk腳本中可能有許多語句。
模式部分決定動作語句何時觸發及觸發事件。處理即對資料進行的操作。如果省略模式部分,動作將時時保持執行狀態。即省略時不對輸入記錄進行匹配比較就執行對應的actions。
模式可以是任何條件語句或正規表示式等。 awk_pattern可以是下列幾種型式:
1) 正規表示式作為awk_pattern:/regexp/例如:awk '/^[a-z]/' input_pfile例如:awk '/^[a-z]/' input_pfile
表達式成立時,觸發對應的actions執行。
① 表達式中可以使用變數(如欄位變數$1,$2等)和/regexp/
② 布林運算式中的運算子:
例如: awk'$2 > 10 "ok"}' input_file
awk '$3 ~ /^d/ {print"ok"}' input_file
③ &&exp(||表達式。 !(非) 可以用於布林表達式或/regexp/之前。
例如: awk '($1 10) {print "ok"}' input _file
使用$1 , $3表示參考第1和第3域,注意這裡用逗號做域分隔。如果希望印製一個有5個網域
的記錄的所有網域,則不必指明$1 , $2 , $3 , $4 , $5,且可使用$0,以所有領域。
為列印一個域或所有域,使用print指令。這是一個awk動作
awk的運行過程:
①如果BEGIN 區塊存在,awk執行它指定的actions。
② awk從輸入檔中讀取一行,稱為一筆輸入紀錄。 (如果輸入檔省略,將從標準輸入讀取)
③ awk將讀入的記錄分割成字段,將第1個字段放入變數$1中,第2個字段放入$2,以此類推。 $0表示整筆記錄。
④把目前輸入記錄依序與每一個awk_cmd中awk_pattern比較,看是否匹配,如果相匹配,就執行對應的actions。如果不匹配,就跳過對應的actions,直到比較完所有的awk_cmd。
⑤當一條輸入記錄比較了所有的awk_cmd後,awk讀取輸入的下一行,繼續重複步驟③和④,這個過程一直持續,直到awk讀取到文件尾。
⑥當awk讀完所有的輸入行後,如果有END,就執行對應的actions。
入門實例:
例1:顯示/etc/passwd檔案中的使用者名稱與登入shell
如果只是顯示/etc/passwd的帳戶和帳戶對應的shell,而與shell間以tab鍵分割
如果只是顯示/etc/passwd檔案中的使用者名稱和登入shell, 而帳戶與shell之間以逗號分割
注:awk的總是輸出到標準輸出,如果想讓awk輸出到文件,可以使用重定向。
例2:顯示/etc/passwd檔案中的UID大於500的所有使用者的使用者名稱和登入shell
例3:如果只是顯示/etc/passwdwd中的
500的用戶名和登入shell,而帳戶與shell之間以逗號分割,而且在所有行添加列名name,shell,在最後一行添加"blue,/bin/nosh"。awk內建變數
awk有許多內建變數用來設定環境訊息,下面給出了最常用的一些變數。
FILENAME awk瀏覽的檔案名稱
FS 設定輸入域分隔符,以等價的記錄數(awk所處理的是第幾行資料)
例6:統計/etc/passwd:檔名,每行的行號,每行的列數,對應的完整行內容:
統計/etc/passwd的帳戶人數
count是自訂變數。之前的action{}裡都是只有一個print,其實print只是一個語句,而action{}可以有多個語句,以;號隔開。
例8:統計某個資料夾下的檔案所佔用的位元組數
如果以M為單位顯示:
注意:以上統計沒有包含子目錄中的檔案。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

禪工作室 13.0.1
強大的PHP整合開發環境

SublimeText3 Linux新版
SublimeText3 Linux最新版

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器