【shell】shell腳本實戰-awk基本介紹


文章目錄

    • 前言
    • 概念
    • awk經常使用的選項和命令
    • awk的選項
    • awk的環境變量
    • awk的運算符
    • awk的內置字符串函數


前言

咱們以前學習過grep,sed,這兩個工具的做用以下:
grep和egrep:文本過濾的
sed:流編輯器,實現編輯的正則表達式

今天咱們要討論的awk,是一個主要作文本輸出的。shell

概念

AWK是一種優良的文本處理工具,Linux及Unix環境中現有的功能最強大的數據處理引擎之一。這種編程及數據操做語言的最大功能取決於一我的所擁有的知識。awk命名:Alfred Aho Peter 、Weinberger和brian kernighan三我的的姓的縮寫。編程

簡單來講awk就是把文件逐行的讀入,以空格爲默認分隔符將每行切片,切開的部分再進行各類分析處理數組

快速掌握awk的技巧:只要記住awk是以行爲單位讀入和輸出的。編輯器

awk經常使用的選項和命令

參數 含義
-F 指定字段一個或多個分割符 例如:-F’[:#/]’ 定義三個分隔符
-v 定義或修改一個awk內部的變量
NR 行號
FS 字段的分隔符,默認爲空格,跟-F選擇同樣
OFS 輸出的字段分隔符,默認爲空格(即把空格替換成指定的字符串)
RS 輸入記錄的分割,以分割符分割以後,使之成爲新的行(即讀入行的時候遇到指定分隔符,就把分割替換成\n)。
ORS 輸出的記錄分隔符,默認爲新行。(即讀入行的時候遇到\n以後把\n用指定的分隔符代替,而後讀入一行,併合併爲同一行)
$NF 表示最後一列
$0 顯示當前一整行
$N N爲數字(N>0),表示第幾列。例如:$1表示用-F指定分隔符分隔後的第一列,                                       2...                                    2...                       2...N以此類推
{} 命令代碼塊,包含一條或多條命令
; 多條命令使用分號分隔
~ 匹配字段,與==相比不是精確比較
!~ 不匹配,不精確比較
== 等於,必須所有相等,精確比較
> 大於
< 小於
>= 大於等於
<= 小於等於
!= 不等於,精確比較
&& 邏輯與
|| 邏輯或
+ 匹配1個或1個以上
// 正則匹配符
print 輸出、打印

awk的選項

選項 描述
-f progfile --file=progfile 從腳本文件中讀取awk命令
-F fs --field-separator=fs 指定字段一個或多個分割符 例如:-F’[:#/]’ 定義三個分隔符
-v var=val --assign var=val 定義或修改一個awk內部的變量
-b --characters-as-bytes 將全部輸入數據視爲單字節字符。posix選項或覆蓋這個選項
-c --traditional 在兼容模式下運行。在兼容模式下,gawk的行爲與UNIX awk相同;沒有一個能夠識別特定於gn的擴展
-C --copyright 在標準輸出和退出中成功打印GNU版權信息消息的簡短版本
-d[file]–dump-variables[=file] 將全局變量的排序列表、它們的類型和最終值打印到文件中。若是沒有提供文件,gawk使用一個名爲awkvars的文件
-e ‘program-text’–source=‘program-text’ 使用程序文本做爲AWK程序源代碼。這個選項容許輕鬆地將庫函數(經過-f和-file選項使用)與在命令行中輸入的源代碼混合使用。它主要用於shell腳本中使用的中型到大型AWK程序
-E file --exec=file 與-f相似,這是最後一個處理的選項。這應該與#一塊兒使用!腳本,特別是爲CGI應用程序,以免從URL向命令行傳遞選項或源代碼(!)。這個選項禁止命令行變量賦值
-g --gen-pot 掃描和解析AWK程序,並在標準輸出上生成GNU .pot(可移植對象模板)格式文件,其中包含程序中全部可本地化字符串的條目。程序自己沒有執行。
-h --help 簡短的打印幫助
-L [fatal] --lint[=fatal] 提供關於可疑或不可移植到其餘AWK實現的構造的警告
-n --non-decimal-data 識別輸入數據中的八進制和十六進制值
-N --use-lc-numeric 使用句點做爲小數點
-O --optimize 在程序的內部表示上啓用優化。目前,這包括簡單的常數合併
-p[file] --profile[=file] 將分析數據發送到PROFIX文件。默認值是DouthPo.OUT
-P --posix 啓動兼容模式;將有以下限制: <1>沒法識別\x <2>當FS被設置爲單個空間時,只有空格和Tab充當字段分隔符,換行符不被設置爲分隔符 <3>以後行不能有?和: <4>關鍵字函數的同義詞FUNC不被識別 <5>運算符和=不能代替和=
-r --re-interval 容許在正則表達式匹配中使用區間表達式
-R --command file 只有DGAWK。從文件讀取存儲的調試器命令
-S --sandbox 在沙盒模式下運行GOWK,禁用Stand()函數,用GETLIN輸入重定向,輸出Read打印和打印的方向,並加載動態擴展。命令執行(經過管道)也被禁用。這有效地阻止了腳本訪問本地資源(除了 命令行中指定的文件)
-t --lint-old 提供對UNIX AWK原始版本不可移植的結構的警告
-V --version 打印AWK的版本信息

awk的環境變量

變量 描述
$N N爲數字(N>0),表示第幾列。例如:$1表示用-F指定分隔符分隔後的第一列,                                        2...                                         2...                   2...N以此類推
$0 顯示當前一整行(有多少行顯示多少行)
$NF 表示最後一列 $(NF-1)是倒數第二列
ARGC 命令行參數的數目
ARGIND 命令行中當前文件的位置(從0開始算)
ARGV 包含命令行參數的數組
CONVFMT 數字轉換格式(默認值爲%.6g)
ENVIRON 環境變量關聯數組
ERRNO 最後一個系統錯誤的描述
FIELDWIDTHS 字段寬度列表(用空格鍵分隔)
FILENAME 當前文件名
NR 行號(當前記錄數)
FNR 同NR,但相對於當前文件
FS 字段的分隔符,默認爲空格,跟-F選擇同樣
OFS 輸出的字段分隔符,默認爲空格(即把空格替換成指定的字符串)
IGNORECASE 若是爲真,則進行忽略大小寫的匹配
NF 當前記錄中的字段數
OFMT 數字的輸出格式(默認值是%.6g)
RLENGTH 由match函數所匹配的字符串的長度
RS 輸入記錄的分割,以分割符分割以後,使之成爲新的行(即讀入行的時候遇到指定分隔符,就把分割替換成\n(默認是\n))
ORS 輸出的記錄分隔符,默認爲新行。(即讀入行的時候遇到\n以後把\n用指定的分隔符代替,而後讀入一行,併合併爲同一行)(默認值是一個換行符)
RSTART 由match函數所匹配的字符串的第一個位置
SUBSEP 數組下標分隔符(默認值是\034)

awk的運算符

運算符 描述
= += -= *= /= %= ^= **= 賦值
條件表達式?值1:值2 三目運算符
|| 邏輯或
&& 邏輯與
~ ~! 匹配正則表達式和不匹配正則表達式
< <= > >= != == 關係運算符
空格 鏈接符
+ - 加,減
* / % 乘,除與求餘
+ - ! 一元加,減和邏輯非
^ *** 冪運算符
++ – 增長或減小,做爲前綴或後綴
$ 字段引用
in 數組成員

awk的內置字符串函數

函數名稱 描述
gsub(r,s) 在整個$0中用s代替r
gsub(r,s,t) 在整個t中用s替代r
index(s,t) 返回s中字符串t的第一位置
length(s) 返回s長度
match(s,r) 測試s是否包含匹配r的字符串
split(s,a,fs) 在fs上將s分紅序列a
sprint(fmt,exp) 返回經fmt格式化後的exp
sub(r,s) 用$0中最左邊最長的子串代替s
substr(s,p) 返回字符串s中從p開始的後綴部分
substr(s,p,n) 返回字符串s中從p開始長度爲n的後綴部分
相關文章
相關標籤/搜索