1. 程式人生 > >AWK命令使用 小結

AWK命令使用 小結

awk 最基本功能是在檔案或字串中基於指定規則瀏覽和抽取資訊,它用於一行中分成數個“欄位”來處理。適合處理 小型資料。 

範例:

     cat /etc/passwd | awk '{FS=":"}$3 < 10 {print $1 "\t" $3}'  解釋:檔案/etc/passwd是以":"分隔的檢視 第三欄 小於10的資料,並且只顯示 帳號 與 第三欄;

執行方式,:

 awk [-Field-separator] 'commands' input-file(s)

這裡commands是真正的awk命令,[-F域分隔符]是可選的,awk預設使用空格分隔,因此如果要瀏覽域間有空格的文字,不必指定這個選項,但如果瀏覽如passwd檔案,此檔案各域使用冒號作為分隔符,則必須使用-F選項:   awk -F : 'commands' input-file

awk執行時,其瀏覽標記為$1,$2...$n,這種方法稱為域標記。使用$1,$3表示參照第1和第3域,注意這裡使用逗號分隔域,使用$0表示使用所有域。例如:

awk '{print $0}' temp.txt > sav.txt  

表示列印所有域並把結果重定向到sav.txt中

awk '{print $0}' temp.txt | tee sav.txt 

 和上例相似,不同的是將在螢幕上顯示出來

awk '{print $1,$4}' temp.txt

   只打印出第1和第4域

awk 'BEGIN {print "NAME  GRADE\n----"} {print $1"\t"$4}' temp.txt 

表示打資訊頭,即輸入的內容的第一行前加上"NAME  GRADE\n-------------",同時內容以tab分開

awk 'BEGIN {print "being"} {print $1} END {print "end"}' temp 

同時列印資訊頭和資訊尾


條件操作符:

    <、<=、==、!=、>=、~匹配正則表示式、!~不匹配正則表示式

    匹配:awk '{if ($4~/ASIMA/) print $0}' temp 表示如果第四個域包含ASIMA,就列印整條

    精確匹配:awk '$3=="48" {print $0}' temp    只打印第3域等於"48"的記錄

    不匹配:  awk '$0 !~ /ASIMA/' temp      列印整條不包含ASIMA的記錄

    不等於:  awk '$1 != "asima"' temp

    小於:    awk '{if ($1<$2) print $1 "is smaller"}' temp

    設定大小寫: awk '/[Gg]reen/' temp      列印整條包含Green,或者green的記錄

    任意字元: awk '$1 ~/^...a/' temp    列印第1域中第四個字元是a的記錄,符號’^’代表行首,符合’.’代表任意字元

    或關係匹配: awk '$0~/(abc)|(efg)/' temp   使用|時,語句需要括起來

    AND與關係:  awk '{if ( $1=="a" && $2=="b" ) print $0}' temp

    OR或關係:   awk '{if ($1=="a" || $1=="b") print $0}' temp

  awk內建變數:

ARGC  

命令列引數個數

NF    

 瀏覽記錄的域個數

AGRV  

命令列引數排列

NR  

已讀的記錄數   

ENVIRON  

支援佇列中系統環境變數的使用

OFS  

輸出域分隔符

FILENAME  

awk瀏覽的檔名  

ORS 

輸出記錄分隔符

FNR  

瀏覽檔案的記錄數  

RS  

控制記錄分隔符

FS  

設定輸入域分隔符,同- F選項

例: awk 'END {print NR}' temp    在最後列印已讀記錄條數

    awk '{print NF,NR,$0} END {print FILENAME}' temp

    awk '{if (NR>0 && $4~/Brown/) print $0}' temp  至少存在一條記錄且包含Brown

    NF的另一用法:  echo $PWD | awk -F/ '{print $NF}'   顯示當前目錄名


執行模式:awk '條件型別1{動作1} 條件型別2{動作2} ...' filename

# last | awk '{print $1 "\t" $3}' <== 檢視登入者的資料,只顯示登入名和ip地址,並以[tab]隔開awk 的內建變數變數名稱 代表的含義

NF 每一行($0)擁有的欄位總數

NR 當前 awk 所處理的是 “第幾行” 資料

FS 指定分隔符,預設一個空格鍵