1. 程式人生 > >linux的awk命令

linux的awk命令

oba var 正則表達式 oot 逗號 一行 表示 dmi 語言

awk是一個強大的文本分析工具,相對於grep的查找,sed的編輯,awk在其對數據分析並生成報告時,顯得尤為強大。簡單來說awk就是把文件逐行的讀入,以空格為默認分隔符將每行切片,切開的部分再進行各種分析處理。

使用方法

awk ‘{pattern + action}‘ {filenames}

其中 pattern 表示 AWK 在數據中查找的內容,而 action 是在找到匹配內容時所執行的一系列命令。花括號({})不需要在程序中始終出現,但它們用於根據特定的模式對一系列指令進行分組。 pattern就是要表示的正則表達式,用斜杠括起來。

awk語言的最基本功能是在文件或者字符串中基於指定規則瀏覽和抽取信息,awk抽取信息後,才能進行其他文本操作。完整的awk腳本通常用來格式化文本文件中的信息。

通常,awk是以文件的一行為處理單位的。awk每接收文件的一行,然後執行相應的命令,來處理文本。

awk [-F  field-separator]  commands  input-file(s)
其中,commands 是真正awk命令,[-F域分隔符]是可選的。 input-file(s) 是待處理的文件。
在awk中,文件的每一行中,由域分隔符分開的每一項稱為一個域。通常,在不指名-F域分隔符的情況下,默認的域分隔符是空格。

實例

假設head -5 /etc/passwd的輸出如下:

/etc/passwd文件存放的是用戶的信息,由6個分號組成的7個信息,解釋如下
(1):用戶名。
(2):密碼(已經加密)
(3):UID(用戶標識),操作系統自己用的
(4):GID組標識。
(5):用戶全名或本地帳號
(6):開始目錄
(7):登錄使用的Shell,就是對登錄命令進行解析的工具

[root@zhoucentos log]# head -5 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

如果只是顯示用戶名

[root@zhoucentos log]# head -5 /etc/passwd | awk -F ‘:‘ ‘{print $1}‘
root
bin
daemon
adm
lp

awk工作流程是這樣的:讀入有‘\n‘換行符分割的一條記錄,然後將記錄按指定的域分隔符劃分域,填充域,$0則表示所有域,$1表示第一個域,$n表示第n個域。默認域分隔符是"空白鍵" 或 "[tab]鍵",所以$1表示用戶名,$2表示密碼

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

[root@zhoucentos log]# head -5 /etc/passwd | awk -F ‘:‘ ‘{print $1"\t"$7}‘
root    /bin/bash
bin    /sbin/nologin
daemon    /sbin/nologin
adm    /sbin/nologin
lp    /sbin/nologin

如果只是顯示/etc/passwd的賬戶和賬戶對應的shell,而賬戶與shell之間以逗號分割,而且在所有行添加列名name,shell,在最後一行添加"admin,/bin/nobash"。

[root@zhoucentos log]# head -5 /etc/passwd | awk -F ‘:‘ ‘BEGIN{print "name,shell"} {print $1","$7} END {print "admin,/bin/nobash"}‘
name,shell
root,/bin/bash
bin,/sbin/nologin
daemon,/sbin/nologin
adm,/sbin/nologin
lp,/sbin/nologin
admin,/bin/nobash

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

搜索/etc/passwd有root關鍵字的所有行

[root@zhoucentos log]# awk -F: ‘/root/‘ /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

這種是pattern的使用示例,匹配了pattern(這裏是root)的行才會執行action(沒有指定action,默認輸出每行的內容)。

搜索支持正則,例如找root開頭的: awk -F: ‘/^root/‘ /etc/passwd

搜索/etc/passwd有root關鍵字的所有行,並顯示對應的shell

[root@zhoucentos log]# awk -F: ‘/root/{print $7}‘ /etc/passwd
/bin/bash
/sbin/nologin

linux的awk命令