awk的基本用法

awk是處理文本文件的一個應(yīng)用程序待讳,幾乎所有 Linux 系統(tǒng)都自帶這個程序。

它依次處理文件的每一行随闺,并讀取里面的每一個字段双妨。對于日志淮阐、CSV 那樣的每行格式相同的文本文件,awk可能是最方便的工具刁品。

awk其實(shí)不僅僅是工具軟件泣特,還是一種編程語言。不過挑随,本文只介紹它的命令行用法状您,對于大多數(shù)場合,應(yīng)該足夠用了。

一膏孟、基本用法

awk的基本用法就是下面的形式眯分。

# 格式

$ awk 動作 文件名


# 示例

$ awk '{print $0}' demo.txt

上面示例中,demo.txt是awk所要處理的文本文件柒桑。前面單引號內(nèi)部有一個大括號弊决,里面就是每一行的處理動作print $0。其中魁淳,print是打印命令飘诗,$0代表當(dāng)前行,因此上面命令的執(zhí)行結(jié)果界逛,就是把每一行原樣打印出來昆稿。

awk也可以處理標(biāo)準(zhǔn)輸入(stdin)。

$ echo 'this is a test' | awk '{print $0}'

this is a test

上面代碼中仇奶,print $0就是把標(biāo)準(zhǔn)輸入this is a test貌嫡,重新打印了一遍。

awk會根據(jù)空格和制表符该溯,將每一行分成若干字段,依次用$1别惦、$2狈茉、$3代表第一個字段、第二個字段掸掸、第三個字段等等氯庆。

$ echo 'this is a test' | awk '{print $3}'

a

上面代碼中,$3代表this is a test的第三個字段a扰付。

下面堤撵,為了便于舉例,我們把/etc/passwd文件保存成demo.txt羽莺。

這個文件的字段分隔符是冒號(:)实昨,所以要用-F參數(shù)指定分隔符為冒號。然后盐固,才能提取到它的第一個字段荒给。

$ awk -F ':' '{ print $1 }' demo.txt

root

daemon

bin

sys

sync

二、變量

除了$ + 數(shù)字表示某個字段刁卜,awk還提供其他一些變量志电。

變量NF表示當(dāng)前行有多少個字段,因此$NF就代表最后一個字段蛔趴。

$ echo 'this is a test' | awk '{print $NF}'

test

$(NF-1)代表倒數(shù)第二個字段挑辆。

$ awk -F ':' '{print $1, $(NF-1)}' demo.txt

root /root

daemon /usr/sbin

bin /bin

sys /dev

sync /bin

上面代碼中,print命令里面的逗號,表示輸出的時候鱼蝉,兩個部分之間使用空格分隔茉继。

變量NR表示當(dāng)前處理的是第幾行。

$ awk -F ':' '{print NR ") " $1}' demo.txt

1) root

2) daemon

3) bin

4) sys

5) sync

上面代碼中蚀乔,print命令里面烁竭,如果原樣輸出字符,要放在雙引號里面吉挣。

awk的其他內(nèi)置變量如下派撕。

FILENAME:當(dāng)前文件名

FS:字段分隔符,默認(rèn)是空格和制表符睬魂。

RS:行分隔符终吼,用于分割每一行,默認(rèn)是換行符氯哮。

OFS:輸出字段的分隔符际跪,用于打印時分隔字段,默認(rèn)為空格喉钢。

ORS:輸出記錄的分隔符姆打,用于打印時分隔記錄,默認(rèn)為換行符肠虽。

OFMT:數(shù)字輸出的格式幔戏,默認(rèn)為%.6g。

三税课、函數(shù)

awk還提供了一些內(nèi)置函數(shù)闲延,方便對原始數(shù)據(jù)的處理。

函數(shù)toupper()用于將字符轉(zhuǎn)為大寫韩玩。

$ awk -F ':' '{ print toupper($1) }' demo.txt

ROOT

DAEMON

BIN

SYS

SYNC

上面代碼中垒玲,第一個字段輸出時都變成了大寫。

其他常用函數(shù)如下找颓。

tolower():字符轉(zhuǎn)為小寫合愈。

length():返回字符串長度。

substr():返回子字符串叮雳。

sin():正弦想暗。

cos():余弦。

sqrt():平方根帘不。

rand():隨機(jī)數(shù)说莫。

awk內(nèi)置函數(shù)的完整列表,可以查看手冊寞焙。

四储狭、條件

awk允許指定輸出條件互婿,只輸出符合條件的行。

輸出條件要寫在動作的前面辽狈。

$ awk '條件 動作' 文件名


$ awk -F ':' '/usr/ {print $1}' demo.txt

root

daemon

bin

sys

上面代碼中慈参,print命令前面是一個正則表達(dá)式,只輸出包含usr的行刮萌。

下面的例子只輸出奇數(shù)行驮配,以及輸出第三行以后的行。

# 輸出奇數(shù)行

$ awk -F ':' 'NR % 2 == 1 {print $1}' demo.txt

root

bin

sync


# 輸出第三行以后的行

$ awk -F ':' 'NR >3 {print $1}' demo.txt

sys

sync

下面的例子輸出第一個字段等于指定值的行着茸。

$ awk -F ':' '$1 == "root" {print $1}' demo.txt

root


$ awk -F ':' '$1 == "root" || $1 == "bin" {print $1}' demo.txt

root

bin

五壮锻、if 語句

awk提供了if結(jié)構(gòu),用于編寫復(fù)雜的條件涮阔。

$ awk -F ':' '{if ($1 > "m") print $1}' demo.txt

root

sys

sync

上面代碼輸出第一個字段的第一個字符大于m的行猜绣。

if結(jié)構(gòu)還可以指定else部分。

$ awk -F ':' '{if ($1 > "m") print $1; else print "---"}' demo.txt

root

---

---

sys

sync

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末敬特,一起剝皮案震驚了整個濱河市掰邢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌伟阔,老刑警劉巖辣之,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異减俏,居然都是意外死亡召烂,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進(jìn)店門娃承,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人怕篷,你說我怎么就攤上這事历筝。” “怎么了廊谓?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵梳猪,是天一觀的道長。 經(jīng)常有香客問我蒸痹,道長春弥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任叠荠,我火速辦了婚禮匿沛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘榛鼎。我一直安慰自己逃呼,他們只是感情好鳖孤,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著抡笼,像睡著了一般苏揣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上推姻,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天平匈,我揣著相機(jī)與錄音,去河邊找鬼藏古。 笑死增炭,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的校翔。 我是一名探鬼主播弟跑,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼防症!你這毒婦竟也來了孟辑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤蔫敲,失蹤者是張志新(化名)和其女友劉穎饲嗽,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奈嘿,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡貌虾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了裙犹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尽狠。...
    茶點(diǎn)故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖叶圃,靈堂內(nèi)的尸體忽然破棺而出袄膏,到底是詐尸還是另有隱情,我是刑警寧澤掺冠,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布沉馆,位于F島的核電站,受9級特大地震影響德崭,放射性物質(zhì)發(fā)生泄漏斥黑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一眉厨、第九天 我趴在偏房一處隱蔽的房頂上張望锌奴。 院中可真熱鬧,春花似錦缺猛、人聲如沸缨叫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽耻姥。三九已至销钝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間琐簇,已是汗流浹背蒸健。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留婉商,地道東北人似忧。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像丈秩,于是被迫代替她去往敵國和親盯捌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評論 2 350

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

  • 本文主要解決四個問題: 第一問:awk的定義與來源是什么蘑秽? 第二問:awk 的作用是什么饺著? 第三:akw的命令格式...
    RealLuo閱讀 3,090評論 0 0
  • awk是處理文本文件的一個應(yīng)用程序,幾乎所有Linux系統(tǒng)都自帶這個程序肠牲。 它依次處理文件的每一行幼衰,并讀取里面的每...
    hangba843閱讀 707評論 0 0
  • 一、Python簡介和環(huán)境搭建以及pip的安裝 4課時實(shí)驗(yàn)課主要內(nèi)容 【Python簡介】: Python 是一個...
    _小老虎_閱讀 5,729評論 0 10
  • 轉(zhuǎn)載 原文的排版和內(nèi)容都更加友好,并且詳細(xì),我只是在這里貼出了一部分留作自己以后參考和學(xué)習(xí),如希望更詳細(xì)了解AWK...
    XKirk閱讀 3,196評論 2 25
  • sed工具簡介 用法:sed [-nefri] 動作參數(shù):-n:使用安靜模式(Silent)模式缀雳,一般在sed的...
    Bloo_m閱讀 999評論 0 1