一. awk簡介
awk是一種處理文字檔案的語言,是乙個強大的文字分析工具。
它可以依次處理檔案的每一行,並讀取裡面的每乙個字段。對於日誌這樣的每行格式相同的文字檔案,awk可能是最方便的工具。
1.awk語法
基於模式匹配檢查輸入文字,逐行處理並輸出
格式1:前置命令 |
awk 選項 『條件』
格式2:awk 選項 『條件』檔案..
.. 其中print是最常用的編輯指令,若有多條指令用分號 ;分隔
awk過濾資料時支援僅列印某一列,如第2列、第4列等;
處理檔案時,若未指定分隔符,則預設將空格、製表符(tab鍵)等作為分隔符;
內建變數;
$0 檔案所有內容
$1 檔案第一列
$2 檔案第二列
...nr 檔案當前的行號
nf 檔案當前行的列數
2.基本命令 awk 『』 檔名
[root@red-hat ~]
# echo "this is my" | awk ''
is[root@red-hat ~]
# awk '' /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..
.```bash
[root@red-hat ~]
# awk '' /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..
.
由此得出結論 和 效果是一樣的
awk會根據空格和製表符(如:),將每一行分成若干字段,依次用$1、$2、$3代表第乙個字段、第二個字段、第三個字段等等。
[root@red-hat ~]
# awk -f ':' '' /etc/passwd
root
bindaemon
admlp sync
shutdown
halt
mail
operator
games
先示例一下 把檔案的行號列印出來,除第一列每兩個冒號之間為乙個字段
[root@red-hat ~]
# cat -n /etc/passwd
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 operator:x:11:0:operator:/root:/sbin/nologin
11 games:x:12:100:games:/usr/games:/sbin/nologin
12 ftp:x:14:50:ftp user:/var/ftp:/sbin/nologin
[root@red-hat ~]
# awk -f: '$3<5' /etc/passwd
1 23 4
5
[root@red-hat ~]
# awk -f: '' /etc/passwd
1 72 7
3 74 7
5 76 7
7 7
[root@red-hat ~]
# awk -f: '' /etc/passwd
使用者: root 使用者的直譯器為: /bin/bash
使用者: bin 使用者的直譯器為: /sbin/nologin
使用者: daemon 使用者的直譯器為: /sbin/nologin
使用者: adm 使用者的直譯器為: /sbin/nologin
使用者: lp 使用者的直譯器為: /sbin/nologin
上面**中,print命令裡面的逗號,表示輸出的時候,兩個部分之間使用空格分隔。
print命令裡面,如果原樣輸出字元,要放在雙引號裡面。
[root@red-hat ~]
# awk -f ':' '' /etc/passwd
1) root
2) bin
3) daemon
4) adm
5) lp
6)sync
7)shutdown
三.awk 條件
1.多用於過濾機制
語法:awk 選項 『begin {指令} end{指令}』 檔案
awk 選項 『begin』
awk 『過濾前執行的指令{print $1} 過濾完要執行的指令』 檔案
x=10 bash中定義
a.賦值計算
[root@red-hat ~]
# awk 'begin'
20[root@red-hat ~]
# awk 'begin'
30
b.通過awk統計系統中使用bash直譯器的使用者個數
[root@red-hat ~]
# awk 'begin/bash/end' /etc/passwd
1
d.輸出以root開頭的行
[root@red-hat ~]
# awk -f: '/^root/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@red-hat ~]
# awk -f: '$1~/root/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
e.找出passwd檔案中直譯器不是以nologin結尾的行,列印使用者名字段
[root@red-hat ~]
# awk -f: '$7!~/nologin/' /etc/passwd
root /bin/bash
sync /bin/sync
shutdown /sbin/shutdown
halt /sbin/halt
f.輸出賬戶uid大於10並且小於20的賬戶資訊,列印使用者名稱、uid、直譯器
[root@red-hat ~]
# awk -f: '$3>10 && $3<20 ' /etc/passwd
operator 11 /sbin/nologin
games 12 /sbin/nologin
ftp 14 /sbin/nologin
g.輸出賬戶uid大於等於1000的賬戶資訊,列印使用者名稱、uid、直譯器
[root@red-hat ~]
#awk -f: '$3>=1000' /etc/passwd
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:ftp user:/var/ftp:/sbin/nologin
linux命令 awk學習
我們在面試中經常被問到的linux命令 就都會包括awk命令的使用,下面我向大家總結awk命令的詳細使用。希望能給大家一些幫助。在國內很多大型公司面試後台程式設計師的時候無一例外都會問到下面這個題目 請統計某個apache或者nginx 內的log檔案,並求出裡面ip數的top10 當然,這個問題不...
LInux 命令awk學習
一 實現的功能 現有倆個檔案a.txt 裡邊有倆列資料 bid,name b.txt 好幾列資料 bid,pv 其中a.txt有3800w的資料量,b.txt有1300w的資料量,而且a.txt的資料報含b.txt的資料,要將b.txt的資料在a.txt裡邊刪除掉,並且還要給b.txt的bid 對應...
linux命令學習 awk 命令學習
三 awk 指令碼 四 awk 程式設計 五 寫在結尾 awk是linux上一款強大的文字分析工具,它可以將檔案逐行的讀入,然後用分割符分割開來,再對分割的各個部分進行處理。awk分割的各個部分叫做域,預設的分割符是空格和製表符。可以通過 f來指定分割符。awk有3個不同版本 awk nawk和ga...