【Linux篇】--awk的使用

LHBlog發表於2018-04-07

一、前述

awk是一個強大的文字分析工具。相對於grep的查詢,sed的編輯,awk在其對資料分析並生成報告時,顯得尤為強大。
簡單來說awk就是把檔案逐行的讀入,(空格,製表符)為預設分隔符將每行切片,切開的部分再進行各種分析處理。

二、具體

1、基礎知識點

awk -F '{pattern + action}' {filenames}
支援自定義分隔符
支援正規表示式匹配
支援自定義變數,陣列  a[1]  a[tom]  map(key)
支援內建變數
ARGC               命令列引數個數
ARGV               命令列引數排列
ENVIRON            支援佇列中系統環境變數的使用
FILENAME           awk瀏覽的檔名
FNR                瀏覽檔案的記錄數
FS                 設定輸入域分隔符,等價於命令列 -F選項
NF                 瀏覽記錄的域的個數
NR                 已讀的記錄數
OFS                輸出域分隔符
ORS                輸出記錄分隔符
RS                 控制記錄分隔符
支援函式
print、split、substr、sub、gsub
支援流程控制語句,類C語言
if、while、do/while、for、break、continue

$0表示所有域, $1表示第一個域, $n表示第n個域。 預設域分隔符是空格鍵或tab鍵。
2、舉例

只是顯示/etc/passwd的賬戶:CUT
awk -F':' '{print $1}' passwd
只是顯示/etc/passwd的賬戶和賬戶對應的shell,而賬戶與shell之間以逗號分割,而且在所有行開始前新增列名name,shell,在最後一行新增"blue,/bin/nosh"(cut,sed)
awk -F':' 'BEGIN{print "name,shell"} {print $1 "," $7} END{print "blue,/bin/nosh"}' passwd
搜尋/etc/passwd有root關鍵字的所有行
awk  '/root/ { print $0}'   passwd
統計/etc/passwd檔案中,每行的行號,每行的列數,對應的完整行內容

xxx     Math English C++  Experiment
Monkey  100   90     95   Good
Cat     80    100    60   Perfect
Dog     90    60     70   Great
Tiger   95    85     90   Fantastic

 

    Administrator@51B6904C3C8A485 ~/learn_awk  
    $ awk '{print $2}' test.txt  
    Math  
    100  
    80  
    90  
    95  
      
    Administrator@51B6904C3C8A485 ~/learn_awk  
    $  

 

 看這篇部落格吧 ,講得很好https://blog.csdn.net/stpeace/article/details/46848873

 

相關文章