9月2日 GNU awk 1

1劈伴、基本用法

awk [options] ‘program’ var=value file…
awk [options] -f programfile var=value file…
awk [options] 'BEGIN{ action;… } pattern{ action;… } END{ action;… }' file ...
awk程序通常由:BEGIN語句塊、能夠使用模式匹配的通用語句塊藤韵、END語句塊,共3部分組成
program通常是被單引號或雙引號中
?選項:
-F指明輸入時用到的字段分隔符
-v var=value: 自定義變量
awk的用法和sed很相似蛔屹,都自帶行的循環(huán)摹察,可以一行一行的讀取文件的內(nèi)容進(jìn)行處理泽谨,pattern指明處理哪一行,action匹配的內(nèi)容進(jìn)行什么處理動作夭谤。
sed [opption] 'script' file ,script=地址界定+命令
地址界定:1或者1,2或者1~2或者/pattern/或者/pattern1/,/pattern2/
pattern可以用正則表達(dá)式棺牧,表示匹配的行,或者匹配的第幾行到第幾行
awk [opption] 'program' file program=pattern+action
pattern也表示匹配的行朗儒,action表示對匹配的內(nèi)容進(jìn)行什么處理動作

2颊乘、基本格式

基本格式:awk [options] 'program' file…
?program:pattern{action statements;..}
?pattern和action:
?pattern部分決定動作語句何時觸發(fā)及觸發(fā)事件
BEGIN,END
?action statements對數(shù)據(jù)進(jìn)行處理参淹,放在{}內(nèi)指明
print, printf
?分割符、域和記錄
?awk執(zhí)行時乏悄,由分隔符分隔的字段(域浙值、列)標(biāo)記$1,$2..$n稱為域標(biāo)識。也就是$1代表第一列的值檩小,$2代表第二列的值开呐,$0為所有列,也就是整行规求。注意:和shell中變量$符含義不同
?文件的每一行稱為記錄筐付。
?省略action,則默認(rèn)執(zhí)行print $0 的操作
print格式:print item1, item2, ...
?要點:
(1) 逗號分隔符
(2) 輸出的各item可以是字符串阻肿,也可以是數(shù)值瓦戚;當(dāng)前記錄的字段、變量或awk的表達(dá)式
(3) 如省略item丛塌,相當(dāng)于print $0

3较解、awk工作原理

?第一步:執(zhí)行BEGIN{action;… }語句塊中的語句,執(zhí)行的時候還沒有讀入文件的內(nèi)容赴邻,和文件無關(guān)印衔,后面不用跟文件名也可以,常用于打印表頭姥敛。
?第二步:從文件或標(biāo)準(zhǔn)輸入(stdin)讀取一行奸焙,然后執(zhí)行pattern{ action;… }語句塊,它逐行掃描文件徒溪,從第一行到最后一行重復(fù)這個過程忿偷,直到文件全部被讀取完畢。
?第三步:當(dāng)讀至輸入流末尾時臊泌,執(zhí)行END{action;…}語句塊鲤桥,當(dāng)所有的行都處理完畢時執(zhí)行此語句塊,這里和文件有關(guān)系渠概,指的是文件所有行都處理完之后進(jìn)行的操作茶凳,后面要跟文件名,比如對所有的行進(jìn)行匯總操作播揪。
?BEGIN語句塊在awk開始從輸入流中讀取行之前被執(zhí)行贮喧,這是一個可選的語句塊,比如變量初始化猪狈、打印輸出表格的表頭等語句通诚渎伲可以寫在BEGIN語句塊中
?END語句塊在awk從輸入流中讀取完所有的行之后即被執(zhí)行,比如打印所有行的分析結(jié)果這類信息匯總都是在END語句塊中完成雇庙,它也是一個可選語句塊
?pattern語句塊中的通用命令是最重要的部分谓形,也是可選的灶伊。如果沒有提供pattern語句塊,則默認(rèn)執(zhí)行{ print }寒跳,即打印每一個讀取到的行聘萨,awk讀取的每一行都會執(zhí)行該語句塊

舉例

[root@centos6 app]#awk -F: '{print $1}' /etc/passwd   ---只打印第一
列,-F指定輸入時用到的字段的分隔符
[root@centos6 app]#df |awk '{print $5}'   ---沒有-F默認(rèn)空格做為分隔
符童太,并且空格可以為多個
Use%
3%
4%
1%
[root@centos6 sbin]#cat /etc/passwd|head -n2|awk -F: '{print $1,$3}'  
---默認(rèn)是以空格做為輸出分隔符
root 0
bin 1
[root@centos6 sbin]#cat /etc/passwd|head -n2|awk -F: '{print $1$3}' 
---如果什么都不加表示沒有分隔符
root0
bin1
[root@centos6 sbin]#awk -F: '{print $1"\t"$3}' /etc/passwd  
---/t可以讓列對齊米辐,但前面的第一列太長的話也對齊不了,只是部分
對齊
root    0
bin 1
daemon  2
adm 3
[root@centos6 app]#df|awk '{print $1"---"$5}'    ---可以指定輸出的分
割符书释,注意{}里面如果是變量不用雙引號翘贮,但如果是字符串要用雙引
號
Filesystem---Use%
/dev/sda2---3%
/dev/sda1---4%
/dev/sda3---1%
[root@centos6 app]#awk 'BEGIN{print 19/3}'  ---BEGIN語句不需要
讀取文件內(nèi)容,與文件無關(guān)爆惧,執(zhí)行BEGIN語句時還沒有讀入文件內(nèi)
容择膝,只是打印表頭
6.33333
[root@centos6 app]#cat /etc/passwd |head -n1|awk -v FS=":" '{print $1,$3}'   --- FS=":"是一個變量,指定輸入分隔符
root 0
[root@centos6 app]#cat /etc/passwd |head -n1|awk -v FS=":" '{print $1FS$3}'   ---可以引用這個變量
root:0
[root@centos6 app]#fs=":";cat /etc/passwd |head -n1|awk -v FS=$fs '{print $1FS$3}'
root:0
[root@centos6 app]#cat /etc/passwd |head -n1|awk -v FS=":" -v OFS="---" '{print $1,$3}'   ---定義變量指定輸入和輸出分隔符
root---0
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末检激,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子腹侣,更是在濱河造成了極大的恐慌叔收,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件傲隶,死亡現(xiàn)場離奇詭異饺律,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)跺株,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進(jìn)店門复濒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人乒省,你說我怎么就攤上這事巧颈。” “怎么了袖扛?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵砸泛,是天一觀的道長。 經(jīng)常有香客問我蛆封,道長唇礁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任惨篱,我火速辦了婚禮盏筐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘砸讳。我一直安慰自己琢融,他們只是感情好界牡,可當(dāng)我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吏奸,像睡著了一般欢揖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上奋蔚,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天她混,我揣著相機(jī)與錄音,去河邊找鬼泊碑。 笑死坤按,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的馒过。 我是一名探鬼主播臭脓,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼腹忽!你這毒婦竟也來了来累?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤窘奏,失蹤者是張志新(化名)和其女友劉穎嘹锁,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體着裹,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡领猾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了骇扇。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摔竿。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖少孝,靈堂內(nèi)的尸體忽然破棺而出继低,到底是詐尸還是另有隱情,我是刑警寧澤韭山,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布郁季,位于F島的核電站,受9級特大地震影響钱磅,放射性物質(zhì)發(fā)生泄漏梦裂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一盖淡、第九天 我趴在偏房一處隱蔽的房頂上張望年柠。 院中可真熱鬧,春花似錦、人聲如沸冗恨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掀抹。三九已至虐拓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間傲武,已是汗流浹背蓉驹。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留揪利,地道東北人态兴。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像疟位,于是被迫代替她去往敵國和親瞻润。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載 原文的排版和內(nèi)容都更加友好,并且詳細(xì),我只是在這里貼出了一部分留作自己以后參考和學(xué)習(xí),如希望更詳細(xì)了解AWK...
    XKirk閱讀 3,219評論 2 25
  • awk:報告生成器甜刻,格式化文本輸出 內(nèi)容: awk介紹 awk基本用法 awk變量 awk格式化 awk操作符 a...
    BossHuang閱讀 1,457評論 0 9
  • 本章主要學(xué)習(xí)內(nèi)容awk介紹 ?awk基本用法 ?awk變量 ?awk格式化 ?awk操作符 ?awk條件判斷 ?a...
    楠人幫閱讀 1,271評論 0 8
  • awk介紹awk變量printf命令:實現(xiàn)格式化輸出操作符awk patternawk actionawk數(shù)組aw...
    哈嘍別樣閱讀 1,567評論 0 4
  • awk: grep,sed,awk grep:文本過濾 sed:文本編輯 awk:文本格式化工具绍撞; 1 什么是aw...
    木林森閱讀 1,785評論 0 16