awk是linux下的一個命令,他對其他命令的輸出,對文件的處理都十分強大,其實他更像一門編程語言,他可以自定義變量,有條件語句,有循環,有數組,有正則,有函數等。他讀取輸出,或者文件的方式是一行,一行的讀,根據你給出的條件進行查找,並在找出來的行中進行操作,感覺他的設計思想,真的很簡單,但是結合實際情況,具體操作起來就沒有那麼簡單了。他有三種形勢,awk,gawk,nawk,平時所説的awk其實就是gawk。
選項
-F 緊跟分隔符,表示讀入的字段以輸入的分隔符分割
-v 進入變量模式 可以進行變量的賦值及調用(調用不需要加 $ 符)
POSIX options: GNU long options: (standard)
-f progfile --file=progfile
-F fs --field-separator=fs
-v var=val --assign=var=val
Short options: GNU long options: (extensions)
-b --characters-as-bytes
-c --traditional
-C --copyright
-d[file] --dump-variables[=file]
-e 'program-text' --source='program-text'
-E file --exec=file
-g --gen-pot
-h --help
-L [fatal] --lint[=fatal]
-n --non-decimal-data
-N --use-lc-numeric
-O --optimize
-p[file] --profile[=file]
-P --posix
-r --re-interval
-S --sandbox
-t --lint-old
-V --version
變量
變量 描述
$n 當前記錄的第n個字段,字段間由 FS分隔。
$0 完整的輸入記錄。
FS 字段分隔符(默認是任何空格)。
RS 記錄分隔符(默認是一個換行符)。
NF 當前記錄中的字段數。(分隔符隔開的代表一個字段)
NR 當前記錄數。
OFS 輸出字段分隔符(默認值是一個空格)。
ORS 輸出記錄分隔符(默認值是一個換行符)。
OFMT 數字的輸出格式(默認值是%.6g)。
FNR/NR 但相對於當前文件。
ARGC 命 令行參數的數目。
ARGV 包 含命令行參數的數組。
ERRNO 最後一個系統錯誤的描述。
ARGIND 命令行中當前文件的位置(從0開始算)。
RSTART 由match函數所匹配的字符串的第一個位置。
SUBSEP 數組下標分隔符(默認值是\034)。
CONVFMT 數字轉換格式(默認值為%.6g)
ENVIRON 環 境變量關聯數組。
RLENGTH 由match函數所匹配的字符串的長度。
FILENAME 當前文件名。
IGNORECASE 如果為真,則進行忽略大小寫的匹配。
FIELDWIDTHS 字段寬度列表(用空格鍵分隔)。
運算符
運算符 描述
= += -= *= /= %= ^= **= 賦值
?: C條件表達式
|| 邏輯或
&& 邏輯與
~ ~! 匹配正則表達式和不匹配正則表達式
< <= > >= != == 關係運算符
空格 連接
+ - 加,減
* / & 乘,除與求餘
+ - ! 一元加,減和邏輯非
^ *** 求冪
++ -- 增加或減少,作為前綴或後綴
$ 字段引用
in 數組成員
awk的正則
匹配符 描述
\Y 匹配一個單詞開頭或者末尾的空字符串
\B 匹配單詞內的空字符串
\< 匹配一個單詞的開頭的空字符串,錨定開始
\> 匹配一個單詞的末尾的空字符串,錨定末尾
\W 匹配一個非字母數字組成的單詞
\w 匹配一個字母數字組成的單詞
\' 匹配字符串末尾的一個空字符串
\‘ 匹配字符串開頭的一個空字符串
字符串函數
函數名 描述
sub 匹配記錄中最大、最靠左邊的子字符串的正則表達式,並用替換字符串替換這些字符串。如果沒有指定目標字符串就默認使用整個記錄。替換隻發生在第一次匹配的 時候
gsub 整個文檔中進行匹配
index 返回子字符串第一次被匹配的位置,偏移量從位置1開始
substr 返回從位置1開始的子字符串,如果指定長度超過實際長度,就返回整個字符串
split 可按給定的分隔符把字符串分割為一個數組。如果分隔符沒提供,則按當前FS值進行分割
length 返回記錄的字符數
match 返回在字符串中正則表達式位置的索引,如果找不到指定的正則表達式則返回0。match函數會設置內建變量RSTART為字符串中子字符串的開始位 置,RLENGTH為到子字符串末尾的字符個數。substr可利於這些變量來截取字符串
toupper 和 tolower 可用於字符串大小間的轉換,該功能只在gawk中有效
數學函數
函數名 返回值
atan2(x,y) y,x 範圍內的餘切
cos(x) 餘弦函數
exp(x) 求冪
int(x) 取整
log(x) 自然對數
rand() 隨機數
sin(x) 正弦
sqrt(x) 平方根
srand(x) x是rand()函數的種子
int(x) 取整,過程沒有舍入
rand() 產生一個大於等於0而小於1的隨機數
format 的使用
要點
- 其與print命令的最大不同是,printf需要指定format;
- format用於指定後面的每個item的輸出格式;
- printf語句不會自動打印換行符;\n
format格式的指示符都以%開頭,後跟一個字符;如下
%c: 顯示字符的ASCII碼;
%f: 顯示浮點數;
%g, %G: 以科學計數法的格式或浮點數的格式顯示數值;
%s: 顯示字符串;
%u: 無符號整數;
%%: 顯示%自身;
%d, %i:十進制整數;
%e, %E:科學計數法顯示數值;
修飾符
N: 顯示寬度;
-: 左對齊;
+:顯示數值符號;
原文鏈接:http://linux.51yip.com/search...