linuxawk命令如何使用

今天小編給大家分享一下linux awk命令如何使用的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

站在用戶的角度思考問題,與客戶深入溝通,找到昌吉網(wǎng)站設(shè)計(jì)與昌吉網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、空間域名、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋昌吉地區(qū)。

在linux中,awk命令是文本數(shù)據(jù)處理工具,適合格式化文本文件,對(duì)文本文件進(jìn)行更復(fù)雜的加工處理、分析,語法“awk  [option]  'pattern[action]'  file ...”。awk具備強(qiáng)大的文本格式化能力,比如對(duì)一堆看起來沒有什么規(guī)律的日志文件,文本文件等,通過awk命令之后,格式化輸出為專業(yè)的可以做為應(yīng)用級(jí)數(shù)據(jù)分析的樣式。

Linux 系統(tǒng)中有一個(gè)功能更加強(qiáng)大的文本數(shù)據(jù)處理工具,就是 awk。它誕生于 20 世紀(jì) 70 年代末期,這也許是它影響了眾多 Linux 用戶的原因之一。

曾有人推測(cè) awk 命令的名字來源于 awkward 這個(gè)單詞。其實(shí)不然,此命令的設(shè)計(jì)者有 3 位,他們的姓分別是 Aho、Weingberger 和 Kernighan,awk 就取自這 3 為大師姓的首字母。

awk具備強(qiáng)大的文本格式化能力,比如對(duì)一堆看起來沒有什么規(guī)律的日志文件,文本文件等,通過awk命令之后,格式化輸出為專業(yè)的可以做為應(yīng)用級(jí)數(shù)據(jù)分析的樣式;

awk像是一門編程語言,支持條件判斷,數(shù)組,循環(huán)等諸多的功能。

linux三劍客

  • grep,擅長(zhǎng)單純的查找或匹配文本內(nèi)容;

  • sed,擅長(zhǎng)文本編輯,處理匹配到的文本內(nèi)容;

  • awk,適合格式化文本文件,對(duì)文本文件進(jìn)行更復(fù)雜的加工處理、分析;

awk理論基礎(chǔ)

1、awk語法

awk  [option]  'pattern[action]'  file ...

awk   參數(shù)       條件動(dòng)作           文件

linux awk命令如何使用

action 是指動(dòng)作,awk擅長(zhǎng)文本格式化,且能輸出格式化后的結(jié)果,因此最常用的動(dòng)作就是 print 和 printf

2、awk處理文本內(nèi)容模式

  • awk默認(rèn)以空格為分隔符,且多個(gè)空格也識(shí)別為一個(gè)空格,作為分隔符;

  • awk按行處理文件,一行處理完畢之后,再處理下一行;

  • awk可以根據(jù)用戶指定的分隔符去工作,沒有指定,則默認(rèn)為空格;

一、awk內(nèi)置變量

內(nèi)置變量說明
$n指定分隔符后,當(dāng)前的第n個(gè)列所在的字段
$0完整的一行記錄
FS字段分隔符,默認(rèn)是空格
NF(Number of fields)字段分隔后,當(dāng)前一共多少個(gè)字段
NR(Number of records)當(dāng)前記錄數(shù),行數(shù)

更多的內(nèi)置變量,可通過 man awk命令進(jìn)行查看

簡(jiǎn)單案例展示

提前準(zhǔn)備一個(gè)文本,內(nèi)容如下

linux awk命令如何使用

1、輸出第二列內(nèi)容

awk '{print $2}' alx.txt

linux awk命令如何使用

2、輸出多列內(nèi)容

直接在第一步后面的基礎(chǔ)上追加,中間用 “,” 分割

awk '{print $2,$3}' alx.txt

linux awk命令如何使用

3、查看第三行內(nèi)容

考察對(duì)NR的使用,NR表示第N行記錄的模式匹配

awk 'NR==3{print $0}' alx.txt

linux awk命令如何使用

輸出多行

awk 'NR==5,NR==6{print $0}' alx.txt

linux awk命令如何使用

4、輸出從第3到第五行,并顯示行號(hào)

awk 'NR==3,NR==5 {print NR,$0}' alx.txt

linux awk命令如何使用

5、自定義輸出內(nèi)容

某些情況下,需要給每一列添加類似于excel的表頭信息,就可以考慮使用awk的自定義輸出;

awk '{print "第一列: "$1,"第二列: "$2}' alx.txt

linux awk命令如何使用

需要注意的是大括號(hào)外面的使用 ’ 單引號(hào),括號(hào)里面的使用雙引號(hào)

二、awk參數(shù)

參數(shù)說明
-F指定分隔字段符
-v定義或修改一個(gè)awk內(nèi)部變量
-f從腳本文件中讀取awk命令

上文談到,awk默認(rèn)的字段分隔符為空格,但是像下面這樣的文本,以 # 為分隔符,就需要用到自定義分隔符;

linux awk命令如何使用

1、顯示第一列和第二列內(nèi)容

awk -F "#" '{print $1,$2}' zcy2.txt

linux awk命令如何使用

2、顯示文件第一列,倒是第一列,和倒數(shù)第二列的內(nèi)容

awk '{print $1,$(NF-1),$(NF-2)}' alx.txt

linux awk命令如何使用

3、取出本機(jī)的IP地址

linux awk命令如何使用

使用awk的方式獲取的話,如果以空格為分隔符,我們發(fā)現(xiàn)目標(biāo)字段在第二行的第二列,使用下面的命令即可,看起來,比起sed和grep命令似乎更簡(jiǎn)單;

ifconfig eth0 | awk 'NR==2{print $2}'

linux awk命令如何使用

4、取出密碼文件中的第一列和最后一列

考察對(duì)自定義輸入分隔符的使用,可以看到,下面的文本文件中,可以考慮使用 : 進(jìn)行分割;

linux awk命令如何使用

awk -F ':' '{print $1,$NF}' pwd2.txt

linux awk命令如何使用

三、OFS輸出分隔符

通過上文的學(xué)習(xí),我們知道awk命令執(zhí)行后,默認(rèn)采用空格分割字段,而這個(gè)空格就是默認(rèn)的輸出分割符,

單在某些情況下,為了將數(shù)據(jù)展示的效果更加醒目一些,就可以使用OFS的自定義輸出分隔符;

仍然以上面的密碼文本為例,輸出第一列和最后一列的字段;

awk -F ':' -v OFS=' *** ' '{print $1,$NF}' pwd2.txt

該表默認(rèn)輸出分隔符,直接在awk后面使用: -v OFS=‘自定義輸出分隔符’

linux awk命令如何使用

四、awk變量

awk參數(shù)

參數(shù)說明
-F指定分隔字段符
-v定義或修改一個(gè)awk內(nèi)部變量
-f從腳本文件中讀取awk命令

對(duì)于awk來講,變量分為:內(nèi)置變量和自定義變量

awk內(nèi)置變量

參數(shù)說明
FS輸入字段分隔符,默認(rèn)為空白字符
OFS輸出字段分隔符,默認(rèn)為空白字符
RS輸入記錄分隔符,指定輸入時(shí)的換行符
ORS輸出記錄分隔符,輸出時(shí)用指定符號(hào)替換換行符
NF當(dāng)前行的字段個(gè)數(shù),字段數(shù)量
NR行號(hào),當(dāng)前處理文本行的行號(hào)
FNR各文件分別計(jì)數(shù)的行號(hào)
FILENAME當(dāng)前文件名
ARGC命令行參數(shù)個(gè)數(shù)
ARGV數(shù)組,保存的是命令行所給定的各個(gè)參數(shù)

比較常用的內(nèi)置變量包括: NR,NF,F(xiàn)NR

FILENAME 使用

FILENAME 為awk的內(nèi)置變量,通過下面這個(gè)命令,可以看到在每行記錄之前,輸出了當(dāng)前文件名稱;

awk 'NR==1,NR==3{print FILENAME,$0}' alx.txt

linux awk命令如何使用

ARGV使用

先來看下面這條命令的執(zhí)行結(jié)果

awk 'NR==1,NR==3{print ARGV[0],ARGV[1],$0}' alx.txt

linux awk命令如何使用

可以發(fā)現(xiàn),在輸出的每一行記錄前面,拼上了 awk 和 alx.txt這兩個(gè)字段,這兩個(gè)字段就是這行命令整體解析出來的2個(gè)內(nèi)置參數(shù);

自定義變量

看下面這條命令輸出效果,通過-v參數(shù),可以自定義變量進(jìn)行參數(shù)傳遞;

awk -v myname="zcy" 'BEGIN{print "我的名字是?" ,myname}'

linux awk命令如何使用

五、awk格式化輸出

在上文,我們接觸的是awk的輸出功能,主要使用了 print 這個(gè)進(jìn)行輸出,它只能對(duì)文本進(jìn)行簡(jiǎn)單的輸出,但是并不能美化或者修改輸出格式;

printf 格式化輸出

如果對(duì)C語言有過了解的同學(xué),對(duì)printf 并不陌生,使用這個(gè)命令(函數(shù))可以對(duì)文本進(jìn)行格式化輸出;

printf與print的幾點(diǎn)區(qū)別

  • printf 需要指定format;

  • format 用于指定后面的每個(gè) item輸出格式;

  • printf 語句不會(huì)自動(dòng)打印換行符; \n ; print 默認(rèn)添加換行符;

如下,假如我們直接使用 printf 這樣操作,看下效果

awk '{printf $0}' alx.txt

linux awk命令如何使用

明顯來說,把所有內(nèi)容都輸出到同一行了,這時(shí)候,就需要使用 printf的格式化輸出來控制;

awk '{printf "%s\n", $0}' alx.txt

linux awk命令如何使用

再看一個(gè)案例,使用 printf 將文本中的每一列添加前置輸出

awk '{printf "第一列:%s   第二列:%s   第三列:%s\n" ,$1,$2,$3}' alx.txt

linux awk命令如何使用

六、awk模式pattern

上文了解到,awk的語法如下 :

awk [option] ‘pattern[action]’ file …

而且我們了解到,awk是按行處理文本,以上都是關(guān)于 print 相關(guān),接下來,聊聊pattern相關(guān)的內(nèi)容;

在pattern中,有個(gè)比較常見的pattern,BEGIN和END;

  • BEGIN 模式是處理文本之前需要執(zhí)行的動(dòng)作;

  • END模式是處理完成所有的行之后執(zhí)行的操作;

awk 'BEGIN{print "小明在學(xué)linux"}'

linux awk命令如何使用

或者下面這樣

awk 'BEGIN{print "小明在學(xué)linux"} {print $0}END{print "處理結(jié)束"}' alx.txt

linux awk命令如何使用

注意:BEGIN 和 END分別放到處理文本內(nèi)容前后即可

awk如果不指定模式是按行處理,如果指定了模式,只有符合模式的才會(huì)被處理

awk常用模式

關(guān)系運(yùn)算符說明
<小于
<=小于等于
==等于
!=不等于
>=大于等于
~匹配正則
!~不匹配正則

1、打印前三行的文本內(nèi)容

awk 'NR<=3{print $0}' alx.txt

linux awk命令如何使用

2、匹配密碼文本中含有 zcy 的行

awk '/^zcy/{print $0}' pwd.txt

linux awk命令如何使用

3、格式化輸出 /etc/passwd 的部分字段

awk -F ":" 'BEGIN{print"用戶名\t\t\t字段1\t\t     字段2\t\t     權(quán)限"} {printf "user:%-20s%-20s%-20s%-20s\n", $1,$4,$5,$7}' pwd.txt

linux awk命令如何使用

4、找出pwd文件中nologin的用戶

linux awk命令如何使用

awk '/\/sbin\/nologin$/{print NR,$0}' pwd.txt

linux awk命令如何使用

5、找出 下面這個(gè)區(qū)間的文本行

linux awk命令如何使用

awk '/^daemon/,/^operator/{print NR,$0}' pwd.txt

linux awk命令如何使用

以上就是“l(fā)inux awk命令如何使用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

名稱欄目:linuxawk命令如何使用
轉(zhuǎn)載源于:http://muchs.cn/article42/jsojec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、App設(shè)計(jì)、搜索引擎優(yōu)化、網(wǎng)站收錄、網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航

廣告

聲明:本網(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)

成都seo排名網(wǎng)站優(yōu)化