熱門!!shell三劍客之「awk」

2021-10-23 17:17:59 字數 2610 閱讀 3645

在 linux/unix 系統中,awk 是乙個功能強大的編輯工具,逐行讀取輸入文字,並根據指定的匹配模式進行查詢,對符合條件的內容進行格式化輸出或者過濾處理,可以在無互動的情況下實現相當複雜的文字操作,被廣泛應用於 shell 指令碼,完成各種自動化配置任務。

通常情況下 awk 所使用的命令格式如下所示,其中,單引號加上大括號「{}」用於設定對資料進行的處理動作。awk 可以直接處理目標檔案,也可以通過「-f」讀取指令碼對目標檔案進行處理。

awk 選項 『模式或條件 』 檔案 1 檔案 2 … //過濾並輸出檔案中符合條件的內容

awk -f 指令碼檔案 檔案 1 檔案 2 … //從指令碼中呼叫編輯指令,過濾並輸出內容

awk 執行結果可以通過 print 的功能將字段資料列印顯示。在使用 awk 命令的過程中,可以使用邏輯操作符「&&」表示「與」、「||」 表示「或」、「!」表示「非」;還可以進行簡單的數**算,如+、-、*、/、%、^分別表示加、減、乘、除、取餘和乘方。

awk 從輸入檔案或者標準輸入中讀入資訊,與 sed 一樣,資訊的讀入也是逐行讀取的。不同的是 awk 將文字檔案中的一行視為乙個記錄,而將一行中的某一部分(列)作為記錄中的乙個字段(域)。為了操作這些不同的字段,awk 借用 shell 中類似於位置變數的方法, 用$1、$2、$3…順序地表示行(記錄)中的不同字段。另外 awk 用$0 表示整個行(記錄)。不同的字段之間是通過指定的字元分隔。awk 預設的分隔符是空格。awk 允許在命令列中用「-f 分隔符」的形式來指定分隔符。

awk 包含幾個特殊的內建變數(可直接用)如下所示:

內建變數

含義fs

指定每行文字的字段分隔符,預設為空格或製表位

nf當前處理的行的字段個數

nr當前處理的行的行號(序數)

$0當前處理的行的整行內容

$n當前處理行的第 n 個字段(第 n 列)

filename

被處理的檔名

rs資料記錄分隔,預設為\n,即每行為一條記錄

[root@localhost ~]

# awk '' test.txt //效果等同於cat

123 123 123 123 123

*** *** *** hhh hhh

the boy is not boy

this dog like cat

kdskldsf jkldjfsl

[root@localhost ~]

# awk 'nr==1,nr==3' test.txt //輸出第 1~3 行內容

123 123 123 123 123

*** *** *** hhh hhh

the boy is not boy

[root@localhost ~]

# awk '(nr>=1)&&(nr<=3)' test.txt //輸出第 1~3 行內容

123 123 123 123 123

*** *** *** hhh hhh

the boy is not boy

[root@localhost ~]

# awk 'nr==1||nr==3' test.txt //輸出第 1 行、第 3 行內容

123 123 123 123 123

the boy is not boy

[root@localhost ~]

# awk '(nr%2)==1' test.txt //輸出所有奇數行的內容

123 123 123 123 123

the boy is not boy

kdskldsf jkldjfsl

[root@localhost ~]

# awk '(nr%2)==0' test.txt //輸出所有偶數行的內容

*** *** *** hhh hhh

this dog like cat

[root@localhost ~]

# awk '/^root/' /etc/passwd //輸出以root 開頭的行

root:x:0:0:root:/root:/bin/bash

[root@localhost ~]

# awk 'begin ;/\/bin\/bash$/;end ' /etc/passwd

6 //統計以/bin/bash 結尾的行數,等同於 grep -c /etc/passwd

[root@localhost ~]

# awk '' test.txt //輸出每行中(以空格或製表位分隔)的第 3 個字段

123***

islike

[root@localhost ~]

# awk -f: '/bash$/' /etc/passwd //呼叫wc -l 命令統計使用 bash 的使用者個數,等同於 grep -c /etc/passwd

6

shell程式設計三劍客之awk

四 awk使用高階 awk是一種程式語言,主要用於在linux unix下對文字和資料進行處理,是linux unix下的乙個工具。資料可以來自標準輸入 乙個或多個檔案,或其它命令的輸出。awk的處理文字和資料的方式 逐行掃瞄檔案,預設從第一行到最後一行,尋找匹配的特定模式的行,並在這些行上進行你想...

三劍客之awk

awk命令的執行過程 滿足 awk從檔案中讀取一行內容到記憶體中 判斷是否滿足條件 滿足 執行對應的命令 輸出到螢幕 不滿足 awk從檔案中讀取一行內容到記憶體中 判斷是否滿足條件 不滿足 繼續讀取檔案裡的內容直到檔案最後awk命令的語法awk 引數 模式 檔案 awk 引數 條件 找誰 檔案 表示...

linux 三劍客之 awk

awk是一種程式語言,用於在linux unix下對文字和資料進行處理。資料可以來自標準輸入 stdin 乙個或多個檔案,或其它命令的輸出。它支援使用者自定義函式和動態正規表示式等先進功能,是linux unix下的乙個強大程式設計工具。它在命令列中使用,但更多是作為指令碼來使用。awk有很多內建的...