shell程式設計之awk命令詳解

2021-09-29 07:29:15 字數 4541 閱讀 7431

shell程式設計之awk命令詳解

linux

本篇部落格主要介紹linux常用命令中的對文字和資料進行處理的命令awk的用法。

awk命令

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

awk命令格式和選項

語法格式

awk [options] 『script』 var=value file(s)

awk [options] -f scriptfile var=value file(s)

常用命令選項

-f fs fs 指定輸入分隔符,fs可以時字串或正規表示式

-v var=value 賦值乙個使用者定義變數,將外部變數傳遞給awk

-f scriptfile 從指令碼檔案中讀取awk命令

awk指令碼

awk指令碼是由模式和操作組成的。

模式與操作

模式模式可以是以下任意一種:

正規表示式:使用萬用字元的擴充套件集

關係表示式:使用運算子進行操作,可以是字串或數字的比較測試

模式匹配表示式:用運算子~(匹配)和~!不匹配

begin 語句塊, pattern語句塊, end語句塊

操作操作由乙個或多個命令、函式、表示式組成,之間由換行符或分號隔開,並位於大刮號內,主要部分是:變數或陣列賦值、輸出命令、內建函式、控制流語句。

awk指令碼基本格式

awk 『begin pattern end』 file

乙個awk指令碼通常由begin, 通用語句塊,end語句塊組成,三部分都是可選的。 指令碼通常是被單引號或雙引號包住。

awk 『begin end』 filename

awk 「begin end」 filename

awk執行過程分析

第一步: 執行begin pattern 語句塊中的語句

begin語句塊:在awk開始從輸入輸出流中讀取行之前執行,在begin語句塊中執行如變數初始化,列印輸出表頭等操作。

第二步:從檔案或標準輸入中讀取一行,然後執行pattern語句塊。它逐行掃瞄檔案,從第一行到最後一行重複這個過程,直到全部檔案都被讀取完畢。

pattern語句塊:pattern語句塊中的通用命令是最重要的部分,它也是可選的。如果沒有提供pattern語句塊,則預設執行,即列印每乙個讀取到的行。類似乙個迴圈體,會對檔案中的每一行進行迭代,通常將變數初始化語句放在begin語句塊中,將列印結果等語句放在end語句塊中。

第三步:當讀至輸入流末尾時,執行end 語句塊

end語句塊:在awk從輸入流中讀取完所有的行之後即被執行,比如列印所有行的分析結果這類資訊彙總都是在end語句塊中完成,它也是乙個可選語句塊。

awk內建變數

$n : 當前記錄的第n個字段,比如n為1表示第乙個字段,n為2表示第二個字段。

$0 : 這個變數包含執行過程中當前行的文字內容。

argc : 命令列引數的數目。

argind : 命令列中當前檔案的位置(從0開始算)。

ar** : 包含命令列引數的陣列。

convfmt : 數字轉換格式(預設值為%.6g)。

environ : 環境變數關聯陣列。

errno : 最後乙個系統錯誤的描述。

fieldwidths : 字段寬度列表(用空格鍵分隔)。

filename : 當前輸入檔案的名。

nr : 表示記錄數,在執行過程中對應於當前的行號

fnr : 同nr :,但相對於當前檔案。

fs : 字段分隔符(預設是任何空格)。

ignorecase : 如果為真,則進行忽略大小寫的匹配。

nf : 表示字段數,在執行過程中對應於當前的字段數。 print $nf答應一行中最後乙個字段

ofmt : 數字的輸出格式(預設值是%.6g)。

ofs : 輸出字段分隔符(預設值是乙個空格)。

ors : 輸出記錄分隔符(預設值是乙個換行符)。

rs : 記錄分隔符(預設是乙個換行符)。

rstart : 由match函式所匹配的字串的第乙個位置。

rlength : 由match函式所匹配的字串的長度。

subsep : 陣列下標分隔符(預設值是34)。

shell程式設計之awk命令詳解

linux

本篇部落格主要介紹linux常用命令中的對文字和資料進行處理的命令awk的用法。

awk命令

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

awk命令格式和選項

語法格式

awk [options] 『script』 var=value file(s)

awk [options] -f scriptfile var=value file(s)

常用命令選項

-f fs fs 指定輸入分隔符,fs可以時字串或正規表示式

-v var=value 賦值乙個使用者定義變數,將外部變數傳遞給awk

-f scriptfile 從指令碼檔案中讀取awk命令

awk指令碼

awk指令碼是由模式和操作組成的。

模式與操作

模式模式可以是以下任意一種:

正規表示式:使用萬用字元的擴充套件集

關係表示式:使用運算子進行操作,可以是字串或數字的比較測試

模式匹配表示式:用運算子~(匹配)和~!不匹配

begin 語句塊, pattern語句塊, end語句塊

操作操作由乙個或多個命令、函式、表示式組成,之間由換行符或分號隔開,並位於大刮號內,主要部分是:變數或陣列賦值、輸出命令、內建函式、控制流語句。

awk指令碼基本格式

awk 『begin pattern end』 file

乙個awk指令碼通常由begin, 通用語句塊,end語句塊組成,三部分都是可選的。 指令碼通常是被單引號或雙引號包住。

awk 『begin end』 filename

awk 「begin end」 filename

awk執行過程分析

第一步: 執行begin pattern 語句塊中的語句

begin語句塊:在awk開始從輸入輸出流中讀取行之前執行,在begin語句塊中執行如變數初始化,列印輸出表頭等操作。

第二步:從檔案或標準輸入中讀取一行,然後執行pattern語句塊。它逐行掃瞄檔案,從第一行到最後一行重複這個過程,直到全部檔案都被讀取完畢。

pattern語句塊:pattern語句塊中的通用命令是最重要的部分,它也是可選的。如果沒有提供pattern語句塊,則預設執行,即列印每乙個讀取到的行。類似乙個迴圈體,會對檔案中的每一行進行迭代,通常將變數初始化語句放在begin語句塊中,將列印結果等語句放在end語句塊中。

第三步:當讀至輸入流末尾時,執行end 語句塊

end語句塊:在awk從輸入流中讀取完所有的行之後即被執行,比如列印所有行的分析結果這類資訊彙總都是在end語句塊中完成,它也是乙個可選語句塊。

awk內建變數

$n : 當前記錄的第n個字段,比如n為1表示第乙個字段,n為2表示第二個字段。

$0 : 這個變數包含執行過程中當前行的文字內容。

argc : 命令列引數的數目。

argind : 命令列中當前檔案的位置(從0開始算)。

ar** : 包含命令列引數的陣列。

convfmt : 數字轉換格式(預設值為%.6g)。

environ : 環境變數關聯陣列。

errno : 最後乙個系統錯誤的描述。

fieldwidths : 字段寬度列表(用空格鍵分隔)。

filename : 當前輸入檔案的名。

nr : 表示記錄數,在執行過程中對應於當前的行號

fnr : 同nr :,但相對於當前檔案。

fs : 字段分隔符(預設是任何空格)。

ignorecase : 如果為真,則進行忽略大小寫的匹配。

nf : 表示字段數,在執行過程中對應於當前的字段數。 print $nf答應一行中最後乙個字段

ofmt : 數字的輸出格式(預設值是%.6g)。

ofs : 輸出字段分隔符(預設值是乙個空格)。

ors : 輸出記錄分隔符(預設值是乙個換行符)。

rs : 記錄分隔符(預設是乙個換行符)。

rstart : 由match函式所匹配的字串的第乙個位置。

rlength : 由match函式所匹配的字串的長度。

subsep : 陣列下標分隔符(預設值是34)。

Linux shell程式設計之shell命令歷史記錄

目錄 shell的命令歷史記錄 需求 相關引數 實現步驟 系統需要乙個目錄用來記錄所有使用者的命令歷史記錄,來做安全保護。建立乙個目錄 var history,該目錄會建立檔案記錄所有登入使用者的歷史命令,檔案以 username userid.log 格式命名 預設用於記錄使用者歷史命令的檔案是當...

shell程式設計之echo命令

shell的echo命令是用於字串的輸出,格式為 echo string 1.顯示普通字串 echo it is test 結果為 it is a test2.顯示轉義字串 echo it is a test 結果為 it is a test 3.顯示變數 bin bash read name ec...

shell程式設計 之 test命令

shell程式設計裡的測試test命令基本可以分為3種資料型別,每種都不一樣。個人更傾向於理解為條件語句的寫法規則,就是test加條件加判斷語句。基本可以分為6個判斷 eq等於,ne不等於,gt大於,lt小於,ge大於等於,le小於等於 例項 a 1 b 2 if test a eq b 如果a等於...