Linux awk使用指南

2021-08-01 23:59:42 字數 3891 閱讀 1987

awk是乙個強大的資料處理引擎,相對於grep的查詢,sed的編輯,awk對資料的分析和生成的報告更強大

awk 其實就是乙個指令碼程式語言

請記住 awk 是針對檔案的每一行來執行一次單引號 裡面的指令碼**,每讀取到一行就會執行一次,檔案裡面有多少行就會執行多少次,但 begin 和 end 關鍵字後面的 指令碼**除外,如果被處理的檔案中什麼都沒有,那 awk 就一次都不會執行

awk [options] 'program'

file

實戰例子

$ awk '' /etc/passwd
可執行指令碼**使用單引號括起來

花括號裡面就是一些可執行的指令碼**段

當 awk 每讀取一行之後,它會依次執行雙引號裡面的每個指令碼**段

1、awk 預設的分割符為空格和製表符,可以使用 -f 引數來指定分隔符

實戰例子

$ awk -f

':''' /etc/passwd

上面的命令將 /etc/passwd 檔案中的每一行用冒號 : 分割成多個字段,然後用 print 將第 1 列字段的內容列印輸出

2、在 -f 引數中使用一對方括號來指定多個分隔符

$ awk -f

'[()]'

'' some.

log

awk 處理 some.log檔案時就會使用 「(」 和 「)」 來對檔案的每一行進行分割

$0這個表示文字處理時的當前行$1表示文字行被分隔後的第 1 個字段列$2表示文字行被分割後的第 2 個字段列$3表示文字行被分割後的第 3 個字段列$n表示文字行被分割後的第 n 個字段列nr表示檔案中的行號,表示當前是第幾行nf表示檔案中的當前行中列的個數,類似於 mysql 資料表裡面每一條記錄有多少個字段。

fs表示 awk 的輸入分隔符,預設分隔符為空格和製表符,可以對其進行自定義設定

ofs表示 awk 的輸出分隔符,預設為空格,可以對其進行自定義設定

filename表示當前檔案的檔名稱,如果同時處理多個檔案,它也表示當前檔名稱

實戰例子

1 - 列印輸出檔案的每一整行的內容

$ awk '' fruit.txt
2 - 列印輸出檔案的每一行的第 1 列內容

$ awk '' fruit.txt
3 - 列印輸出檔案的每一行的第 1 列、第 2 列和第 3 列內容(其中加入的逗號表示插入輸出分隔符,也就是預設的空格

$ awk '

' fruit.txt

4 - 檔案的每一行的每一列的內容除了可以用 print 命令列印輸出以外,還可以對其進行賦值(表示通過對 $2 變數進行重新賦值,來隱藏每一行的第 2 列內容)

$ awk '' fruit.txt
5 - 在引數列表中加入一些字串或者轉義字元(使用雙引號)

$ awk ''

fruit.txt

6- awk 內建 nr 變數表示每一行的行號

$ awk '' fruit.txt
7 - awk 內建 nf 變數表示每一行的列數

$ awk '' fruit.txt
8 - awk 中 $nf 變數的使用

$ awk '' fruit.txt    //最後一列

$ awk '' fruit.txt //倒數第二列

上面這個$nf就表示每一行的最後一列,因為 nf 表示一行的總列數,然後在其前面加上 $ 符號,表示最後那一列

9 - 同時處理多個檔案

$ awk '' fruit.txt company.txt
當使用 awk 同時處理多個檔案的時候,它會將多個檔案合併處理,變數 filename 就表示當前文字行所在的檔名稱。

在指令碼**段前面使用 begin 關鍵字時,它會在開始讀取乙個檔案之前,執行一次 begin 關鍵字後面的指令碼**段,begin 後面的指令碼**段只會執行一次,執行完之後 awk 程式就會退出

$ awk 'begin ' /etc/passwd
awk 指令碼中可以用多個花括號來執行多個指令碼**

$ awk 'begin  ' /etc/passwd
awk 的 end 指令和 begin 恰好相反,在 awk 讀取並且處理完檔案的所有內容行之後,才會執行 end 後面的指令碼**段

$ awk 'end ' /etc/passwd
$ awk 'begin   end ' /etc/passwd

在 awk 指令碼中宣告和使用變數

$ awk '' /etc/passwd
awk 宣告的變數可以在任何多個花括號指令碼中使用

$ awk 'begin  ' /etc/passwd
$ awk '' company.txt
先宣告兩個變數 a = 12 和 b = 24,然後用 print 列印出 a 加上 b 的結果

符號名稱

+加法運算子

-減法運算子

*乘法運算子

/除法運算子

%取餘運算子

判斷檔案的第 3 列資料,然後將其列印輸出

$ awk '$3 < 5500 ' company.txt  //兩條指令效果相同

$ awk '' company.txt ////兩條指令效果相同

$3 < 5500表示當第 3 列字段的內容小於 5500 的時候才會執行後面的**塊

$ awk '$1 == "yahoo" ' company.txt
符號

名稱<

小於<=

小於或等於

==等於

!=不等於

>

大於>=大於或等於

~匹配正規表示式

!~不匹配正規表示式

對正規表示式不熟悉,就先不寫了

Ubuntu apt 使用指南

起初gnu linux系統中只有.tar.gz。使用者必須自己編譯他們想使用的每乙個程式。在debian出現之後,人們認為有必要在系統中新增 一種機制用來管理安裝在計算機上的軟體包。人們將這套系統稱為dpkg。至此著名的 package 首次在gnu linux上出現。不久之後紅帽子也 開始著手建立...

CImageList使用指南

1.綜述 在mfc 中cimagelist 類封裝了 影象列表控制項的功能,影象列表是乙個具有相同大小的 影象 可以是不同 型別 的集合,其主要用於 應用程式中大規模 圖示的儲存。該控制項是不可 見的,通常與其它如 clistbox ccombobox ccomboboxex ctabctrl 以及...

CImageList使用指南

cimagelist使用指南 1.綜述 在 mfc中cimagelist類封裝了影象列表控制項的功能,影象列表是乙個具有相同大小的影象 可以是不同型別 的集合,其主要用於應用程式中大 規模圖示的儲存,該控制項是不可見的。通常與其它如clistbox,ccombobox,ccomboboxex以及ct...