awk案例學習

來源:互聯網
上載者:User

標籤:style   blog   color   使用   os   io   strong   檔案   

awk是一個強大的文本分析工具,awk就是把檔案逐行的讀入,以空格為預設分隔符號將每行切片,切開的部分再進行各種分析處理。awk語言的最準系統是在檔案或者字串中基於指定規則瀏覽和抽取資訊,awk抽取資訊後,才能進行其他文本操作。

使用方法

awk ‘{pattern+action} {filename}‘

pattern 表示 AWK 在資料中尋找的內容,而 action 是在找到匹配內容時所執行的一系列命令。

例子1:讀取指定列的內容。(last -n:列出最近登陸系統的n個使用者的資訊)

[[email protected]~]$last -5jihite   pts/4        :0.0             Mon Aug 18 23:00   still logged in   jihite   pts/2        :0.0             Mon Aug 18 23:00   still logged in   jihite   pts/1        :0.0             Mon Aug 18 23:00   still logged in   reboot   system boot  3.2.0-61-generic Mon Aug 18 22:40 - 23:03  (00:23)    reboot   system boot  3.2.0-61-generic Sat Aug 16 20:27 - 12:54  (16:26)    wtmp begins Sat Aug  2 01:18:13 2014

 現在利用awk命令只提取第一列的使用者名稱

[[email protected]~]$last -5 | awk ‘{print $1}‘jihitejihitejihiterebootrebootwtmp

 awk工作流程:逐行讀取(以‘\n’區分),預設以空格分開,$0是整行內容,$1是第一列內容。

如果只是顯示/etc/passwd的賬戶

#cat /etc/passwd |awk  -F ‘:‘  ‘{print $1}‘  rootdaemonbinsys

這種是awk+action的樣本,每行都會執行action{print $1}。

-F指定域分隔字元為‘:‘ (預設的域分隔字元是空格)。

例子2:-F指定分割的符號

如果只是顯示/etc/passwd的賬戶和賬戶對應的shell,而賬戶與shell之間以tab鍵分割

#cat /etc/passwd |awk  -F ‘:‘  ‘{print $1"\t"$7}‘root    /bin/bashdaemon  /bin/shbin     /bin/shsys     /bin/sh

$1,$7之間以“\t”分開

例子3:在輸出的開頭和結尾添加輸出

在所有行添加列名name,shell,在最後一行添加"blue,/bin/nosh"。

cat /etc/passwd |awk  -F ‘:‘  ‘BEGIN {print "name,shell"}  {print $1","$7} END {print "blue,/bin/nosh"}‘name,shellroot,/bin/bashdaemon,/bin/shbin,/bin/shsys,/bin/sh....blue,/bin/nosh

awk工作流程是這樣的:先執行BEGING,然後讀取檔案,讀入有/n分行符號分割的一條記錄,然後將記錄按指定的域分隔字元劃分域,填充域,隨後開始執行模式所對應的動作action。接著開始讀入第二條記錄······直到所有的記錄都讀完,最後執行END操作。

例子4:搜尋含有某關鍵字的行 (找出含有關鍵字‘man’的行)

[[email protected]~]$cat ‘/etc/passwd‘ | awk -F : ‘/man/{print $0}‘ man:x:6:12:man:/var/cache/man:/bin/shcolord:x:102:107:colord colour management daemon,,,:/var/lib/colord:/bin/false

例子5:內建變數

ARGC               命令列參數個數ARGV               命令列參數排列ENVIRON            支援隊列中系統內容變數的使用FILENAME           awk瀏覽的檔案名稱FNR                瀏覽檔案的記錄數FS                 設定輸入欄位分隔字元,等價於命令列 -F選項NF                 瀏覽記錄的域的個數NR                 已讀的記錄數OFS                輸出域分隔字元ORS                輸出記錄分隔字元RS                 控制記錄分隔字元

 執行個體

[[email protected]~]$awk  -F ‘:‘  ‘{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF}‘ /etc/passwdfilename:/etc/passwd,linenumber:1,columns:7filename:/etc/passwd,linenumber:2,columns:7filename:/etc/passwd,linenumber:3,columns:7filename:/etc/passwd,linenumber:4,columns:7filename:/etc/passwd,linenumber:5,columns:7filename:/etc/passwd,linenumber:6,columns:7filename:/etc/passwd,linenumber:7,columns:7filename:/etc/passwd,linenumber:8,columns:7filename:/etc/passwd,linenumber:9,columns:7filename:/etc/passwd,linenumber:10,columns:7filename:/etc/passwd,linenumber:11,columns:7filename:/etc/passwd,linenumber:12,columns:7filename:/etc/passwd,linenumber:13,columns:7filename:/etc/passwd,linenumber:14,columns:7filename:/etc/passwd,linenumber:15,columns:7filename:/etc/passwd,linenumber:16,columns:7filename:/etc/passwd,linenumber:17,columns:7filename:/etc/passwd,linenumber:18,columns:7filename:/etc/passwd,linenumber:19,columns:7filename:/etc/passwd,linenumber:20,columns:7filename:/etc/passwd,linenumber:21,columns:7filename:/etc/passwd,linenumber:22,columns:7filename:/etc/passwd,linenumber:23,columns:7filename:/etc/passwd,linenumber:24,columns:7filename:/etc/passwd,linenumber:25,columns:7filename:/etc/passwd,linenumber:26,columns:7filename:/etc/passwd,linenumber:27,columns:7filename:/etc/passwd,linenumber:28,columns:7filename:/etc/passwd,linenumber:29,columns:7filename:/etc/passwd,linenumber:30,columns:7filename:/etc/passwd,linenumber:31,columns:7filename:/etc/passwd,linenumber:32,columns:7filename:/etc/passwd,linenumber:33,columns:7filename:/etc/passwd,linenumber:34,columns:7filename:/etc/passwd,linenumber:35,columns:7filename:/etc/passwd,linenumber:36,columns:7

例子5:awk編程

[[email protected]~]$awk ‘{count++;} END{print "user count is:" count}‘ /etc/passwduser count is:36

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.