詳解 Linux三劍客之AWK工具的使用方法

????awk 是一個強大的文本分析工具剃毒。它不僅是Linux中病袄,也是任何環(huán)境中現(xiàn)有的功能最強大的數(shù)據(jù)處理引擎之一。相對于 grep 的查找赘阀,sed的編輯益缠,awk在其對數(shù)據(jù)分析并生成報告時,顯得尤為強大基公。

????當你第一次拿起雙手在電腦上使用 awk 命令處理一個或者多個文件的時候幅慌,它會依次讀取文件的每一行內容, 然后對其進行處理,awk 命令默認從 stdio 標準輸入獲取文件內容, awk 使用一對單引號來表示 一些可執(zhí)行的腳本代碼酌媒,在可執(zhí)行腳本代碼里面欠痴,使用一對花括號來表示一段可執(zhí)行代碼塊,可以同時存在多個代碼塊秒咨。 awk 的每個花括號內同時又可以有多個指令喇辽,每一個指令用分號分隔,awk 其實就是一個腳本編程語言雨席。說了這么多菩咨,你肯定還是一臉的懵逼。你猜對了陡厘,上面這些都是廢話抽米。先別急,客官請往下看……

????基本的awk語句本文就不討論了糙置,這里著重討論下awk的幾個使用方法


一云茸、變量

????我們都知道,awk中谤饭,$加數(shù)字代表打印每行的第N列标捺,$NF代表最后一列,$0代表整行

而$(NF-1)則可以代表倒數(shù)第二行

舉個例子:

]$ cat demo.txt

a:b:c:d:e:z

f:g:h:i:j

k:l:m:n:o

p:q:r:s:t

u:v:w:x:y


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

a e

f i

k n

p s

u x

print里面的逗號表示輸出的時候揉抵,兩列之間用空格隔開


變量NR表示當前處理的是第幾行

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

1: a

2: f

3: k

4: p

5: u

print命令里亡容,如果要原樣打印字符,則字符要放在雙引號里冤今,例如上面例子中的 awk -F ':' '{print NR ": " $1}' demo.txt


awk還有其他的內置變量:

FILENAME:當前文件名

FS:字段分隔符闺兢,默認為空格和制表符

RS:行分隔符,用于分割每一行

OFS:輸出分隔符戏罢,用于打印時分隔字段屋谭,默認為空格

ORS:輸出記錄的分隔符,用于打印時分隔記錄龟糕,默認為換行符

OFMT:數(shù)字輸出的格式戴而,默認為%.6g


除了內置變量,awk也可以使用我們自定義的外部變量


方法一:

????使用“雙引號+單引號+變量+單引號+雙引號”翩蘸,這種寫法實際是把雙括號變?yōu)閱卫ㄌ柕某A克猓瑐鬟f給awk

]$ t="abc";awk 'BEGIN{print "'$t'"}'????

abc


方法二:

????使用“雙引號+單引號+變量+單引號+雙引號”,變量中如果有空格催首,為了避免shell把空格當成分隔符扶踊,則使用方法二


]$ t="a b c";awk 'BEGIN{print "'"$t"'"}'

a b c


方法三:

使用awk -v選項

]$ t="abc";awk -v v=$t 'BEGIN{print v}'???????

abc



二:函數(shù)

????awk提供了一些內置函數(shù),方便對原始數(shù)據(jù)進行處理郎任。


toupper()用于將字符轉換為大寫

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

A

F

K

P

U


其他常用函數(shù)還有:


tolower():字符轉為小寫秧耗。

length()

:返回字符串長度。

substr()

:返回子字符串舶治。

sin()

:正弦分井。

cos()

:余弦车猬。

sqrt()

:平方根。

rand()

:隨機數(shù)尺锚。


三:條件語句

????awk可以只輸出符合設定條件的行珠闰,條件需要寫在執(zhí)行動作之前。

awk '條件動作' 文件名

]$? awk -F ':' '/o/ {print $1}' demo.txt

k

上述語句瘫辩,print動作之前是一個正則匹配伏嗜,表示只輸出包含有字符“o”的行


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

a

k

u

上述語句表示只輸出奇數(shù)行


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

k

p

u

上述語句表示只輸出第二行之后的行


]$ awk -F ':' '$1 == "p" {print $0}' demo.txt

p:q:r:s:t

上述語句表示只輸出第一個字段為“p”的行


[deployop@cnsz031479 cyj]$ awk -F ':' '$1 == "p" || $2 == "l" {print $0}' demo.txt

k:l:m:n:o

p:q:r:s:t

上述語句表示只輸出第一個字段為“p”或第二個字段為“l(fā)”的行


四、awk的if語句

????awk提供了if結構語句伐厌,用于編寫較復雜的條件環(huán)境


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

k:l:m:n:o

p:q:r:s:t

u:v:w:x:y

上述語句表示輸出第一個字段的第一個字符大于 g 的行


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

---

---

k

p

u

上述語句加入else承绸,表示如果第一個字段的第一個字符大于 g ,則輸出這一行的第一個字段挣轨,否則輸入“---”

以上就是本文討論的幾個awk的使用方法军熏,希望日常工作中幫到大家

謝謝

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市卷扮,隨后出現(xiàn)的幾起案子羞迷,更是在濱河造成了極大的恐慌,老刑警劉巖画饥,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衔瓮,死亡現(xiàn)場離奇詭異,居然都是意外死亡抖甘,警方通過查閱死者的電腦和手機热鞍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來衔彻,“玉大人薇宠,你說我怎么就攤上這事〖瓒睿” “怎么了澄港?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長柄沮。 經(jīng)常有香客問我回梧,道長,這世上最難降的妖魔是什么祖搓? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任狱意,我火速辦了婚禮,結果婚禮上拯欧,老公的妹妹穿的比我還像新娘详囤。我一直安慰自己,他們只是感情好镐作,可當我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布藏姐。 她就那樣靜靜地躺著隆箩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪羔杨。 梳的紋絲不亂的頭發(fā)上捌臊,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天,我揣著相機與錄音问畅,去河邊找鬼娃属。 笑死六荒,一個胖子當著我的面吹牛护姆,可吹牛的內容都是我干的。 我是一名探鬼主播掏击,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼卵皂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了砚亭?” 一聲冷哼從身側響起灯变,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎捅膘,沒想到半個月后添祸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡寻仗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年刃泌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片署尤。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡耙替,死狀恐怖,靈堂內的尸體忽然破棺而出曹体,到底是詐尸還是另有隱情俗扇,我是刑警寧澤,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布箕别,位于F島的核電站铜幽,受9級特大地震影響,放射性物質發(fā)生泄漏串稀。R本人自食惡果不足惜啥酱,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望厨诸。 院中可真熱鬧镶殷,春花似錦、人聲如沸微酬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至陷遮,卻和暖如春滓走,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背帽馋。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工搅方, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人绽族。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓姨涡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親吧慢。 傳聞我的和親對象是個殘疾皇子涛漂,可洞房花燭夜當晚...
    茶點故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內容