awk 初步學習筆記

1 . awk 的應用場景
需要重新安排數據的格式時

2 . awk 的格式
awk 'BEGIN {startup code} conditions1{actions1} conditions2{actions2} ... END {cleanup code}'
#其中BEGIN 與 END 語句組是可選的
#conditions[:alnum:] 如果滿足則執行相應的actions[:alnum:]
#conditions[:alnum:] 如果不存在 ,則直接執行 actions[:alnum:]

3 . awk 的變量
$0 存儲awk當前處理的行
$1 存儲awk當前處理的行的第一個字段
$2 存儲awk當前處理的行的第二個字段
....
$n 存儲awk當前處理的行的第n 個字段

FS  awk處理輸入的行時使用的字段分隔符( Field Seperator )
OFS awk輸出的字段的分隔符( Output Field Seperator )
NF  awk當前處理的行中有多少個字段( Number of Fields )
NR  awk當前正在處理第幾行數據(Number of current row )

4 . awk使用的print的特點
--print 後面跟着多個字段 ,每個字段由逗號隔開 ,輸出時 ,每個字段之間自動加OFS變量的值;
(如果不使用逗號隔開每個字段那麼可能導致輸出格式混亂 。)
--print 還有一個特點,就是輸出行的末尾會自動輸出換行符.

owner@YZY:~$ echo 07302284 yao 19890318 shantou guangdong | awk '{print NR , $1 , $2 , $3 }'
1 07302284 yao 19890318

owner@YZY:~$ echo 07302284 yao 19890318 shantou guangdong | awk '{print NR  $1  $2  $3 }'
107302284yao19890318

owner@YZY:~$ echo 07302284 yao 19890318 shantou guangdong | awk '{print NR "/t" $1 "/t" $2 "/t" $3 }'
1    07302284    yao    19890318


5 . awk使用的printf的特點
-- 必須顯式地換行

6 . awk的FS變量的用法
--在BEGIN語句中設置即可
--使用-F選項
owner@YZY:~$ grep owner /etc/passwd | awk 'BEGIN {FS=":"}{print $1,$3,$4}'
owner 1000 1000


wner@YZY:~$ grep owner /etc/passwd | awk -F: '{print $1,$3,$4}'
owner 1000 1000

7 . awk的OFS變量的用法
--由於print會自動使用OFS ,並且OFS默認是一個空格 ,所以如果對格式有特別的要求 ,可以在BEGIN語句中對OFS進行設置.
--使用-v 選項後面跟一個用單引號括起來的對OFS的賦值語句

owner@YZY:~$ echo 07302284 yao 19890318 | awk 'BEGIN {OFS="---new OFS---"} {print $1 , $2 , $3}'
07302284---new OFS---yao---new OFS---19890318


wner@YZY:~$ echo 07302284 yao 19890318 | awk -v 'OFS=---new OFS---' '{print $1 , $2 , $3}'
07302284---new OFS---yao---new OFS---19890318

8 . awk中使用變量
--直接使用,不需要使用$作爲前綴
#文件marks
name  chinese english math
yao   100     100     100
yu    90      90      90
zeng  80      80      80


owner@YZY:~$ cat marks | awk '
>NR==1{printf "/t%s/t%s/t%s/t%s/t%s/n" , $1 , $2 , $3 , $4 , "sum"}
>NR>=2{total=$2+$3+$4 ; printf "/t%s/t%d/t%d/t%d/t%d/n" , $1 , $2 , $3 , $4 , total}'
    name    chinese    english    math    sum
    yao    100    100    100    300
    yu    90    90    90    270
    zeng    80    80    80    240

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章