awk使用詳解(shell)

2021-08-16 19:13:28 字數 2193 閱讀 9296

一.基本介紹

1.awk:

awk是乙個強大的文字分析工具,在對文字檔案的處理以及生成報表,awk是無可替代的。awk認為文字檔案都是結構化的,它將每乙個輸入行定義為乙個記錄,行中的每個字串定義為乙個域(段),域和域之間使用分割符分割。

2.功能:流控制、數**算、程序控制、內建的變數和函式、迴圈和判斷

3.工作原理:

awk 會把每行進行乙個拆分,用相應的命令對拆分出來的「段」進行處理。

(1)行工作模式,讀入檔案的每一行,會把一行的內容,存到$0裡

(2)使用內建的變數fs(段的分隔符,預設用的是空白字元),分割這一行,把分割出來的每個段存到相應的變數$(1-100)

(3)輸出的時候按照內建變數ofs(out fs),輸出

(4)讀入下一行繼續操作

簡單例項

[root@tx3 ~]# echo "this is a book" > awk.txt

[root@tx3 ~]# awk '' awk.txt

is this a book

4.   awk常用內建變數表:

1 $0             當前記錄(作為單個變數)  

2 $1~$n          當前記錄的第n個字段,欄位間由fs分隔  

3 fs             輸入字段分隔符 預設是空格  

4 nf             當前記錄中的字段個數,就是有多少列  

5 nr             已經讀出的記錄數,就是行號,從1開始  

6 rs             輸入的記錄他隔符默 認為換行符  

7 ofs            輸出字段分隔符 預設也是空格  

8 ors            輸出的記錄分隔符,預設為換行符  

9 argc           命令列引數個數  

10 argv           命令列引數陣列  

11 filename       當前輸入檔案的名字  

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

13 argind         當前被處理檔案的argv標誌符  

14 convfmt        數字轉換格式 %.6g  

15 environ        unix環境變數  

16 errno          unix系統錯誤訊息  

17 fieldwidths    輸入字段寬度的空白分隔字串  

18 fnr            當前記錄數  

19 ofmt           數字的輸出格式 %.6g  

20 rstart         被匹配函式匹配的字串首  

21 rlength        被匹配函式匹配的字串長度  

常見引數:

例:列印第一行最後乙個字段(使用:分割)

[root@tx3 ~]# awk -f: 'nr==1' p1

/bin/bash

awk 'begin pattern end' file 

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

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

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

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

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

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

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

awk使用shell變數,shell獲取awk中

這裡提到awk,相信寫shell的朋友都會接觸到。awk 是一種用於處理文字的程式語言工具。awk 提供了極其強大的功能 可以進行正規表示式的匹配 樣式裝入 流控制數 算符 程序控制語句 內建的變數和函式 可以把awk看作一門完全的程式語言,它處理文字的速度是快得驚人的。現在很多基於shell 日誌...

shell程式設計之awk命令詳解

shell程式設計之awk命令詳解 linux 本篇部落格主要介紹linux常用命令中的對文字和資料進行處理的命令awk的用法。awk命令 awk是一種程式語言,用於在linux unix下對文字和資料進行處理。資料可以來自標準輸入 stdin 乙個或多個檔案,或其它命令的輸出。它支援使用者自定義函...

awk中使用shell變數

其實在awk裡,是不能直接使用shell變數的 方法是 awk v 選項讓awk 裡使用shell變數 time 60 awk v time time begin 這樣要注意 在awk裡,time不能加 符號。網上說如下方法都可行 一 var 這種寫法大家無需改變用 括起awk程式的習慣,是老外常用...