Linuxawk命令詳解-創(chuàng)新互聯(lián)

AWK是一種處理文本文件的語(yǔ)言,是一個(gè)強(qiáng)大的文本分析工具。之所以叫AWK是因?yàn)槠淙×巳粍?chuàng)始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符

創(chuàng)新互聯(lián)建站主要從事網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)臺(tái)兒,十余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575

awk是一個(gè)強(qiáng)大的文本分析工具,相對(duì)于grep的查找,sed的編輯,awk在其對(duì)數(shù)據(jù)分析并生成報(bào)告時(shí),顯得尤為強(qiáng)大。簡(jiǎn)單來說awk就是把文件逐行的讀入,以空格為默認(rèn)分隔符將每行切片,切開的部分再進(jìn)行各種分析處理。

使用方法   : awk '{pattern + action}' {filenames}

awk內(nèi)置變量:

$n         當(dāng)前記錄的第n個(gè)字段,字段間由FS分隔

$0         完整的輸入記錄

ARGC     命令行參數(shù)的數(shù)目

ARGIND     命令行中當(dāng)前文件的位置(從0開始算)

ARGV     包含命令行參數(shù)的數(shù)組

CONVFMT     數(shù)字轉(zhuǎn)換格式(默認(rèn)值為%.6g)ENVIRON環(huán)境變量關(guān)聯(lián)數(shù)組

ERRNO     最后一個(gè)系統(tǒng)錯(cuò)誤的描述

FIELDWIDTHS 字段寬度列表(用空格鍵分隔)

FILENAME 當(dāng)前文件名

FNR         各文件分別計(jì)數(shù)的行號(hào)

FS         設(shè)置輸入域分隔符,等價(jià)于命令行 -F選項(xiàng)

IGNORECASE 如果為真,則進(jìn)行忽略大小寫的匹配

NF         一條記錄的字段的數(shù)目

NR         已經(jīng)讀出的記錄數(shù),就是行號(hào),從1開始

OFMT        數(shù)字的輸出格式(默認(rèn)值是%.6g)

OFS         輸出記錄分隔符(輸出換行符),輸出時(shí)用指定的符號(hào)代替換行符

ORS         輸出記錄分隔符(默認(rèn)值是一個(gè)換行符)

RLENGTH     由match函數(shù)所匹配的字符串的長(zhǎng)度

RS         記錄分隔符(默認(rèn)是一個(gè)換行符)

RSTART     由match函數(shù)所匹配的字符串的第一個(gè)位置

SUBSEP     數(shù)組下標(biāo)分隔符(默認(rèn)值是/034)

$NF是number finally,表示最后一列的信息,跟變量NF是有區(qū)別的,變量NF統(tǒng)計(jì)的是每行列的總數(shù)

format格式:

%c:顯示單個(gè)字符

%d,%i:十進(jìn)制整數(shù)

%e,%E:科學(xué)計(jì)數(shù)法顯示數(shù)值

%f:顯示浮點(diǎn)數(shù)

%g,%G:以科學(xué)計(jì)數(shù)法的格式或浮點(diǎn)數(shù)的格式顯示數(shù)值

%s:顯示字符串

%u:無符號(hào)整數(shù)

%%:顯示%自身

修飾符:

N:顯示寬度,N為數(shù)字

-:左對(duì)齊,默認(rèn)為右對(duì)齊

+:顯示數(shù)值符號(hào)

\t 制表符 

\n 換行符 

~ 匹配,與==相比不是精確比較 

!~ 不匹配,不精確比較 

== 等于,必須全部相等,精確比較 

!= 不等于,精確比較 

&&  邏輯與 

|| 邏輯或 

+ 匹配時(shí)表示1個(gè)或1個(gè)以上 

/[0-9][0-9]+/ 兩個(gè)或兩個(gè)以上數(shù)字 

/[0-9][0-9]*/ 一個(gè)或一個(gè)以上數(shù)字 

awk 列輸出:

1.搜索/etc/passwd有root關(guān)鍵字的所有行

[root@127-0-0-1 scripts]# awk '/root/' /etc/passwd                   

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

2.搜索/etc/passwd有root關(guān)鍵字的所有行,并輸出shell列

[root@127-0-0-1 scripts]# awk -F  ":" '/root/ {print $7}' /etc/passwd

/bin/bash

/sbin/nologin

3.統(tǒng)計(jì)/etc/passwd:文件名,每行的行號(hào),每行的列數(shù),對(duì)應(yīng)的完整行內(nèi)容

[root@127-0-0-1 scripts]# awk -F ":" '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}' /etc/passwd

filename:/etc/passwd,linenumber:1,columns:7,linecontent:root:x:0:0:root:/root:/bin/bash

filename:/etc/passwd,linenumber:2,columns:7,linecontent:bin:x:1:1:bin:/bin:/sbin/nologin

filename:/etc/passwd,linenumber:3,columns:7,linecontent:daemon:x:2:2:daemon:/sbin:/sbin/nologin

filename:/etc/passwd,linenumber:4,columns:7,linecontent:adm:x:3:4:adm:/var/adm:/sbin/nologin

filename:/etc/passwd,linenumber:5,columns:7,linecontent:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

filename:/etc/passwd,linenumber:6,columns:7,linecontent:sync:x:5:0:sync:/sbin:/bin/sync

filename:/etc/passwd,linenumber:7,columns:7,linecontent:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

filename:/etc/passwd,linenumber:8,columns:7,linecontent:halt:x:7:0:halt:/sbin:/sbin/halt

filename:/etc/passwd,linenumber:9,columns:7,linecontent:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

filename:/etc/passwd,linenumber:10,columns:7,linecontent:uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

filename:/etc/passwd,linenumber:11,columns:7,linecontent:operator:x:11:0:operator:/root:/sbin/nologin

filename:/etc/passwd,linenumber:12,columns:7,linecontent:games:x:12:100:games:/usr/games:/sbin/nologin

filename:/etc/passwd,linenumber:13,columns:7,linecontent:gopher:x:13:30:gopher:/var/gopher:/sbin/nologin

filename:/etc/passwd,linenumber:14,columns:7,linecontent:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

filename:/etc/passwd,linenumber:15,columns:7,linecontent:nobody:x:99:99:Nobody:/:/sbin/nologin

filename:/etc/passwd,linenumber:16,columns:7,linecontent:dbus:x:81:81:System message bus:/:/sbin/nologin

filename:/etc/passwd,linenumber:17,columns:7,linecontent:vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin

filename:/etc/passwd,linenumber:18,columns:7,linecontent:abrt:x:173:173::/etc/abrt:/sbin/nologin

filename:/etc/passwd,linenumber:19,columns:7,linecontent:saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin

filename:/etc/passwd,linenumber:20,columns:7,linecontent:postfix:x:89:89::/var/spool/postfix:/sbin/nologin

filename:/etc/passwd,linenumber:21,columns:7,linecontent:haldaemon:x:68:68:HAL daemon:/:/sbin/nologin

filename:/etc/passwd,linenumber:22,columns:7,linecontent:ntp:x:38:38::/etc/ntp:/sbin/nologin

filename:/etc/passwd,linenumber:23,columns:7,linecontent:sshd:x:74:74::/var/empty/sshd:/bin/false

filename:/etc/passwd,linenumber:24,columns:7,linecontent:zabbix:x:498:498:Zabbix Monitoring System:/var/lib/zabbix:/bin/bash

filename:/etc/passwd,linenumber:25,columns:7,linecontent:ntop:x:497:497:ntop:/var/lib/ntop:/sbin/nologin

filename:/etc/passwd,linenumber:26,columns:7,linecontent:tcpdump:x:72:72::/:/sbin/nologin

filename:/etc/passwd,linenumber:27,columns:7,linecontent:dev:x:500:500::/home/dev:/bin/bash

filename:/etc/passwd,linenumber:28,columns:7,linecontent:ops:x:501:501::/home/ops:/bin/bash

filename:/etc/passwd,linenumber:29,columns:7,linecontent:qa:x:502:502::/home/qa:/bin/bash

filename:/etc/passwd,linenumber:30,columns:7,linecontent:bigdata:x:503:503::/home/bigdata:/bin/bash

filename:/etc/passwd,linenumber:31,columns:7,linecontent:test:x:504:504::/home/test:/bin/bash

filename:/etc/passwd,linenumber:32,columns:7,linecontent:autobots:x:505:505::/home/autobots:/bin/bash

filename:/etc/passwd,linenumber:33,columns:7,linecontent:netdata:x:496:496:netdata:/opt/netdata:/sbin/nologin

filename:/etc/passwd,linenumber:34,columns:7,linecontent:mysql:x:506:506:MySQL Server:/home/mysql:/bin/bash

filename:/etc/passwd,linenumber:35,columns:7,linecontent:gluster:x:495:495:GlusterFS daemons:/var/run/gluster:/sbin/nologin

filename:/etc/passwd,linenumber:36,columns:7,linecontent:apache:x:48:48:Apache:/var/www:/sbin/nologin

filename:/etc/passwd,linenumber:37,columns:7,linecontent:mysql-proxy:x:494:494:MySQL-Proxy user:/:/sbin/nologin

4.打印/etc/passwd/的第二行信息

[root@127-0-0-1 scripts]# awk 'NR==2{print "filename:" FILENAME,$0}' /etc/passwd   

filename:/etc/passwd bin:x:1:1:bin:/bin:/sbin/nologin

5.獲取第12到30行的第一列的信息

[root@127-0-0-1 scripts]# awk -F ":" '{if(NR > 12 && NR < 30) print $1}' /etc/passwd

gopher

ftp

nobody

dbus

vcsa

abrt

saslauth

postfix

haldaemon

ntp

sshd

zabbix

ntop

tcpdump

dev

ops

qa

6.多分隔符的使用,多個(gè)分隔符利用[]然后在里面寫分隔符即可

[root@127-0-0-1 scripts]# cat yoon.txt 

192.168.1.1:3307

[root@127-0-0-1 scripts]# awk -F '[.:]' '{print $1,$5}' yoon.txt  

192 3307

7.添加了BEGIN和END

hello world

[root@127-0-0-1 scripts]# cat long.txt 

2 this is a test

3 Are you like awk

This's a test

10 There are orange,apple,mongo

[root@127-0-0-1 scripts]# cat long.txt | awk 'BEGIN{print "name,shell"} {print $1,$NF} END {print "hello world"}'

name,shell

2 test

3 awk

This's test

10 orange,apple,mongo

hello world

8.忽略大小寫

[root@127-0-0-1 scripts]# awk 'BEGIN{IGNORECASE=1} /this/' long.txt 

2 this is a test

This's a test

9.使用正則,字符串匹配

輸出第二列包含 "th",并打印第二列與第四列

[root@127-0-0-1 scripts]# awk '$2 ~ /th/ {print $2,$4}' long.txt 

this a

10.輸出第二列不包含 "th",并打印第二列與第四列

[root@127-0-0-1 scripts]# awk '$2 !~ /th/ {print $2,$4}' long.txt

Are like

11.匹配包含27為數(shù)字開頭的行,如27,277,2777...

awk '/[2][7][7]*/{print $0}' /etc/passwd            匹配包含27為數(shù)字開頭的行,如27,277,2777...

12.awk自定義輸出

awk  '{print $1 $3}'  part01           //$1與$3相連輸出,不分隔

awk  '{print $1,$3}'  part01           //多了一個(gè)逗號(hào),$1與$3使用空格分隔

awk  '{print $1 " " $3}'  part01     //$1與$3之間手動(dòng)添加空格分隔

13.awk對(duì)字段數(shù)量做判斷的輸出

awk  '{print $NF}' part01           //將每行第NF個(gè)字段的值打印出來

awk  'NF==4 {print }' part01        //顯示只有4個(gè)字段的行

awk  'NF>2{print $0}' part01        //顯示每行字段數(shù)量大于2的行

14.awk對(duì)行的處理

awk '{print NR,NF,$NF,"\t",$0}' part01 //依次打印行號(hào),字段數(shù),最后字段值,制表符,每行內(nèi)容

awk 'NR==5{print}'   part01               //顯示第5行

awk 'NR==5 || NR==6{print}'   part01      //顯示第5行和第6行

awk 'NR!=1{print}'   part01             //不顯示第一行

15.匹配字符處理

//純字符匹配   !//純字符不匹配   ~//字段值匹配    !~//字段值不匹配   ~/a1|a2/字段值匹配a1或a2 

awk  '/mail/,/mysql/{print}' /etc/passwd         //區(qū)間匹配

awk  '/[2][7][7]*/{print $0}' /etc/passwd            //匹配包含27為數(shù)字開頭的行,如27,277,2777...

awk  '$1~/mail/{print $1}' /etc/passwd           //$1匹配指定內(nèi)容才顯示

awk  '{if($1~/mail/) print $1}' /etc/passwd      //與上面相同

awk  '$1!~/mail/{print $1}' /etc/passwd          //不匹配

16.IF語(yǔ)句,必須用在{}中,且比較內(nèi)容用()擴(kuò)起來

awk  '{if($1~/mail/) print $1}' /etc/passwd                                       //簡(jiǎn)寫

awk  '{if($1~/mail/) {print $1}}'  /etc/passwd                                   //全寫

awk  '{if($1~/mail/) {print $1} else {print $2}}' /etc/passwd            //if...else...

17.條件表達(dá)式 == != > >=

awk  '$1=="183.198.46.6"{print $4}' part01 

awk  '{if($1=="mysql") print $3}' /etc/passwd          //與上面相同 

awk  '$1!="mysql"{print $3}' /etc/passwd               //不等于

awk  '$3>1000{print $3}' /etc/passwd                   //大于

awk  '$3>=100{print $3}' /etc/passwd                   //大于等于

awk  '$3<1{print $3}' /etc/passwd                      //小于

awk  '$3<=1{print $3}' /etc/passwd                     //小于等于

18.邏輯運(yùn)算符 && ||

awk  '$1~/183.198.46.6/ && $4~/2015:19:14:40/ {print$7}' part01

awk  '$1~/mail/ && $3>8 {print }' part01 //邏輯與,$1匹配mail,并且$3>8

awk  '{if($1~/mail/ && $3>8) print }' /etc/passwd

awk  '$1~/mail/ || $3>1000 {print }' /etc/passwd       //邏輯或

awk  '{if($1~/mail/ || $3>1000) print }' /etc/passwd 

19.數(shù)值運(yùn)算

awk  '$3 > 100' /etc/passwd    

awk  '$3 > 100 || $3 < 5' /etc/passwd  

awk  '$3+$4 > 200' /etc/passwd

awk  '/mysql|mail/{print $3+10}' /etc/passwd   //第三個(gè)字段加10打印 

awk  '/mysql/{print $3-$4}' /etc/passwd       //減法

awk  '/mysql/{print $3*$4}' /etc/passwd       //求乘積

awk  '/MemFree/{print $2/1024}' /proc/meminfo   //除法

awk  '/MemFree/{print int($2/1024)}' /proc/meminfo    //取整

20.格式化輸出

awk '{printf "%-8d %-8s %-10s\n",$1,$2,$3}' part01

printf表示格式輸出

%格式化輸出分隔符,-8長(zhǎng)度為8個(gè)數(shù)字,s表示字符串類型,打印每行前三個(gè)字段,指定第一個(gè)字段輸出字符串類型(長(zhǎng)度為8),第二個(gè)字段輸出字符串類型(長(zhǎng)度為8),第三個(gè)字段輸出字符串類型(長(zhǎng)度為10)

分享題目:Linuxawk命令詳解-創(chuàng)新互聯(lián)
分享URL:http://muchs.cn/article26/pddcg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化網(wǎng)站內(nèi)鏈、用戶體驗(yàn)自適應(yīng)網(wǎng)站、網(wǎng)站導(dǎo)航、軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司