一.基本介紹
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程式的習慣,是老外常用...