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等於...