AWK使用方法總結 |
Aawk是一種優秀的文本編輯工具,在系統管理工作中做大量使用。以下是對其做簡單總結. |
AWK內置變量 |
屬性 | 說明 |
$0 | 當前記錄(作爲單個變量) |
$1~$n | 當前記錄的第n個字段,字段間由FS分隔 |
FS | 輸入字段分隔符 默認是空格 |
NF | 當前記錄中的字段個數,就是有多少列 |
NR | 已經讀出的記錄數,就是行號,從1開始 |
RS | 輸入的記錄他隔符默 認爲換行符 |
OFS | 輸出字段分隔符 默認也是空格 |
ARGC | 命令行參數個數 |
ARGV | 命令行參數數組 |
內置變量實例 |
1、常用操作 #awk '/^root/{print $0}' /etc/passwd root:x:0:0:root:/root:/bin/bash /^root/ 爲選擇表達式,$0代表是逐行 |
2、設置字段分隔符號(FS使用方法) #awk 'BEGIN{FS=":"}/^root/{print $1,$NF}' /etc/passwd root /bin/bash FS爲字段分隔符,可以自己設置,默認是空格,因爲passwd裏面是”:”分隔,所以需要修改默認分 隔符。NF是字段總數,$0代表當前行記錄,$1-$n是當前行,各個字段對應值。 |
3、記錄條數(NR,FNR使用方法) #awk 'BEGIN{FS=":"}{print NR,$1,$NF}' /etc/passwd 1 root /bin/bash 2 bin /sbin/nologin 3 daemon /sbin/nologin 4 adm /sbin/nologin 5 lp /sbin/nologin 6 sync /bin/sync 7 shutdown /sbin/shutdown …… NR得到當前記錄所在行 |
4、設置輸出字段分隔符(OFS使用方法) # awk 'BEGIN{FS=":";OFS="^^"}/^root/{print FNR,$1,$NF}' /etc/passwd 1^^root^^/bin/bash
OFS設置默認字段分隔符 |
AWK變量傳值 |
1、獲得普通外部變量 #test='awk code' #echo | awk '{print test}' test="$test" awk code
格式如:awk ‘{action}’ 變量名=變量值 ,這樣傳入變量,可以在action中獲得值。 注意:變量名與值放到’{action}’後面。 2、BEGIN程序塊中變量 # test='awk code' #echo | awk -v test="$test" 'BEGIN{print test}' awk code #echo | awk -v test="$test" '{print test}' awk code 格式如:awk –v 變量名=變量值 [–v 變量2=值2 …] 'BEGIN{action}’ 注意:用-v 傳入變量可以在3中類型的action 中都可以獲得到,但順序在 action前面。 |
awk流程控制語句 |
在linux awk的 while、do-while和for語句中允許使用break,continue語句來控制流程走向,也允許使用exit這樣的語句來退出。break中斷當前正在執行的循環並跳到循環外執行下一條語句。if 是流程選擇用法。 awk中,流程控制語句,語法結構,與c語言類型。下面是各個語句用法。 一.條件判斷語句(if) if(表達式) #if ( Variable in Array ) 語句1 else 語句2 格式中"語句1"可以是多個語句,如果你爲了方便Unix awk判斷也方便你自已閱讀,你最好將多個語句用{}括起來。Unix awk分枝結構允許嵌套,其格式爲: if(表達式) {語句1} else if(表達式) {語句2} else {語句3} # awk 'BEGIN{ test=100; if(test>90) { print "very good"; } else if(test>60) { print "good"; } else { print "no pass"; } }' very good
每條命令語句後面可以用“;”號結尾。 二.循環語句(while,for,do) 1.while語句 格式: while(表達式) {語句} 例子: # awk 'BEGIN{ test=100; total=0; while(i<=test) { total+=i; i++; } print total; }' 5050 2.for 循環 for循環有兩種格式: 格式1: for(變量 in 數組) {語句} 例子: # awk 'BEGIN{ for(k in ENVIRON) { print k"="ENVIRON[k]; } }' AWKPATH=.:/usr/share/awk OLDPWD=/home/web97 SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass SELINUX_LEVEL_REQUESTED= SELINUX_ROLE_REQUESTED= LANG=zh_CN.GB2312 。。。。。。 說明:ENVIRON 是awk常量,是子典型數組。 格式2: for(變量;條件;表達式) {語句} 例子: # awk 'BEGIN{ total=0; for(i=0;i<=100;i++) { total+=i; } print total; }' 3.do循環 格式: do {語句}while(條件) 例子: [chengmo@localhost nginx]# awk 'BEGIN{ total=0; i=0; do { total+=i; i++; }while(i<=100) print total; }' 505050 |
AWK的內置函數 |
一 算術函數 |
函數名 | 說明 |
atan2( y, x ) | 返回 y/x 的反正切。 |
cos( x ) | 返回 x 的餘弦;x 是弧度。 |
sin( x ) | 返回 x 的正弦;x 是弧度。 |
exp( x ) | 返回 x 冪函數。 |
log( x ) | 返回 x 的自然對數。 |
sqrt( x ) | 返回 x 平方根。 |
int( x ) | 返回 x 的截斷至整數的值。 |
rand( ) | 返回任意數字 n,其中 0 <= n < 1。 |