搜尋
首頁php教程PHP开发Linux Shell中awk指令的用法

Linux Shell中awk指令的用法

Dec 15, 2016 am 11:35 AM
awk命令

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的值.

例如:

Linux Shell中awk指令的用法

腳本執行結果如下:

Linux Shell中awk指令的用法

腳本執行結果如下:

腳本執行結果如下:指令, 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/

② 布林運算式中的運算子:



關係運算子: 符合運算子: value ~ /regexp/ 如果value符合/regexp/,則回傳真value!~ /regexp/ 如果value不符/regexp/,則回傳真

例如: awk'$2 > 10 "ok"}' input_file
      awk '$3 ~ /^d/ {print"ok"}' input_file

③ &&exp(||表達式。 !(非) 可以用於布林表達式或/regexp/之前。

例如: awk '($1 10) {print "ok"}' input _file

模式包括兩個特殊字段 BEGIN和END。使用BEGIN語句設定計數和列印頭。 BEGIN語句使用在任何文字瀏覽動作之前,之後文字瀏覽動作依據輸入文字開始執行。 END語句用來在awk完成文字瀏覽動作後列印輸出文字總數和結尾狀態標誌。


實際動作在大括號{ }內指示。動作大多用來列印,但還有一些較長的程式碼諸如i f和循環語句及循環退出結構。如果不指明採取動作,awk將列印出所有瀏覽出來的記錄。


awk執行時,其瀏覽域標記為$1,$2...$n。這種方法稱為域識別。使用這些域標識將更容易對域進行進一步處理。 🎜🎜🎜🎜

使用$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 

Linux Shell中awk指令的用法

如果只是顯示/etc/passwd的帳戶和帳戶對應的shell,而與shell間以tab鍵分割

Linux Shell中awk指令的用法

如果只是顯示/etc/passwd檔案中的使用者名稱和登入shell, 而帳戶與shell之間以逗號分割

Linux Shell中awk指令的用法

注:awk的總是輸出到標準輸出,如果想讓awk輸出到文件,可以使用重定向。


例2:顯示/etc/passwd檔案中的UID大於500的所有使用者的使用者名稱和登入shell

Linux Shell中awk指令的用法

例3:如果只是顯示/etc/passwdwd中的

500的用戶名和登入shell,而帳戶與shell之間以逗號分割,而且在所有行添加列名name,shell,在最後一行添加"blue,/bin/nosh"。

Linux Shell中awk指令的用法

註:

1.awk 後面接兩個單引號並加上大括號 {} 來設定想要對資料進行的處理動作

2.awk工作流程是這樣的:先執行BEGING ,然後讀取文件,讀入有n換行符分割的一條記錄,然後將記錄按指定的域分隔符劃分域,填充域,$0則表示所有域,$1表示第一個域,$n表示第n個域,隨後開始執行模式所對應的動作。接著開始讀入第二筆記錄······直到所有的記錄都讀完,最後執行END操作。

思考題:如何列印所有記錄(以/etc/passwd中的內容為例)

Linux Shell中awk指令的用法

例4:搜尋/etc/passwd有root關鍵字的所有行

Linux Shell中awk指令的用法

這種是pattern (模式)的使用範例,比對了pattern(這裡是root)的行才會執行action(沒有指定action,預設輸出每行的內容)。

搜尋支援正規表示式,例如找root開頭的:

Linux Shell中awk指令的用法

搜尋/etc/passwd有root關鍵字的所有行,並顯示對應的shell

Linux Shell中awk指令的用法

這裡指定了action }


例5:顯示最近登入系統的5個使用者訊息,只顯示使用者名稱和IP位址

使用last指令可以查看最近登入的使用者資訊。如下圖所示:

Linux Shell中awk指令的用法

使用awk指令抽取使用者名稱和IP區域的資料

Linux Shell中awk指令的用法

Linux Shell中awk指令的用法

🎜

awk內建變數

awk有許多內建變數用來設定環境訊息,下面給出了最常用的一些變數。

 FILENAME awk瀏覽的檔案名稱

 FS   設定輸入域分隔符,以等價的記錄數(awk所處理的是第幾行資料)

例6:統計/etc/passwd:檔名,每行的行號,每行的列數,對應的完整行內容:


顯示所有帳戶的記錄,並帶有其記錄號,並在END部分打印輸入文件名

Linux Shell中awk指令的用法

除了awk的內置變量,awk還可以自定義變量

Linux Shell中awk指令的用法

除了awk的內置變量,awk還可以自訂變量

統計/etc/passwd的帳戶人數

count是自訂變數。之前的action{}裡都是只有一個print,其實print只是一個語句,而action{}可以有多個語句,以;號隔開。 Linux Shell中awk指令的用法

這裡沒有初始化count,雖然預設是0,但是妥當的做法還是初始化為0:

例8:統計某個資料夾下的檔案所佔用的位元組數Linux Shell中awk指令的用法

如果以M為單位顯示:Linux Shell中awk指令的用法

注意:以上統計沒有包含子目錄中的檔案。 Linux Shell中awk指令的用法

如果想快速查看所有檔案的長度及其總和,但要排除子目錄,如何實現:

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SublimeText3 Mac版

SublimeText3 Mac版

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

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器