awk 手冊

awk是linux下的一個命令,他對其餘命令的輸出,對文件的處理都十分強大,其實他更像一門編程語言,他能夠自定義變量,有條件語句,有循環,有數組,有正則,有函數等。他讀取輸出,或者文件的方式是一行,一行的讀,根據你給出的條件進行查找,並在找出來的行中進行操做,感受他的設計思想,真的很簡單,可是結合實際狀況,具體操做起來就沒有那麼簡單了。他有三種形勢,awk,gawk,nawk,平時所說的awk其實就是gawk。linux

選項

-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 的使用

要點編程

  1. 其與print命令的最大不一樣是,printf須要指定format;
  2. format用於指定後面的每一個item的輸出格式;
  3. printf語句不會自動打印換行符;\n

format格式的指示符都以%開頭,後跟一個字符;以下數組

%c:     顯示字符的ASCII碼;
%f:     顯示浮點數;
%g,     %G: 以科學計數法的格式或浮點數的格式顯示數值;
%s:     顯示字符串;
%u:     無符號整數;
%%:     顯示%自身;
%d, %i:十進制整數;
%e, %E:科學計數法顯示數值;

修飾符編程語言

N: 顯示寬度;
-: 左對齊;
+:顯示數值符號;

原文連接:http://linux.51yip.com/search...函數

相關文章
相關標籤/搜索