awk的簡單使用

awk

awk的工作模式是掃描文件中的每一行森缠, 并且對符合條件的行進行處理楣富, 處理的時候可以針對整行寄疏, 也可以針對行里的每個域。

所以awk兩個最重要的參數(shù)就是:模式和動作灯荧, 根據(jù)模式找出符合條件的行礁击, 然后執(zhí)行指定的動作。

不指定模式的話默認就對于每一行都執(zhí)行動作逗载, 不指定動作的話默認就是把符合條件的行打印在屏幕上哆窿。

awk的語法

awk的語法如下
awk [options] 'pattern {action}' filename或者
awk [options] -f script filename

第二種形式就是把'pattern {action}'寫在了文件里。

options是可選的厉斟, 最常用的有兩個:

  1. -F seperator挚躯,用來指定域的分隔符, 默認的分隔符是空格擦秽, 也就是每一個單詞是一個域码荔。可以指定多個域分隔符号涯,此時應該把多個與分隔符放置在方括號中目胡, 比如awk -F '[:-]' '{print $1,$3}' filename, 使用:或者-作為域分隔符锯七, 并且打印出第一個和第三個域
  2. -v var=value,用來指定一個用戶自定義的變量链快, 可以稍后再pattern或者action中使用。

awk可以跟上多個pattern和action眉尸, 所以更一般的形式如下:
awk [options] 'pattern1 {action1} pattern2 {action2}...patternN {action}' filename

其中awk有內(nèi)置的兩個action域蜗, 叫做BEGINEND,BEGIN在awk開始遍歷file的時候執(zhí)行,一般可以用來打印開始log或者定義在解析中用到的變量噪猾。 END在awk遍歷文件結(jié)束的時候執(zhí)行霉祸,一般用來打印結(jié)束的log.

所以awk的更一般的形勢是:
awk [options] 'BEGIN {action} patternN {actionN} END {action}' filename

務必要記住, 在awk的單引號中袱蜡, 所有的action都是在花括號中丝蹭, 在花括號外面的都是pattern,BEGIN和END可以看做是兩個特殊的pattern

花括號內(nèi)可以有多個操作坪蚁, 每個操作之間使用分號奔穿;分割, awk的操作支持使用所有的shell命令

awk的模式

awk的模式可以通過以下方式指定:

  • 正則表達式,正則表達式一般都放在/regular/中間
  • 關(guān)系表達式敏晤, 比如字符串或者數(shù)值大小的比較什么的
  • 域 ~ 正則表達式贱田,域 !~ 正則表達式, 域或者變量符合或者不符合某個正則表達式嘴脾, ~!~分別表示域或者變量符合某個正則表達式或者不符合某個正則表達式
  • 使用正則表達式指定的范圍男摧, 比如/pattern1/,/pattern2/

awk內(nèi)置的環(huán)境變量, 只介紹最常用的

  • $n 第n個域,默認是以空格分割的
  • $0 當前完整的記錄耗拓,awk把每一個處理過的行都稱為一個記錄
  • FILENAME 當前正在處理的文件的名稱
  • NR number of record拇颅, 當前已經(jīng)處理過的記錄的個數(shù)
  • NF number of field, 當前正在處理的記錄包含的域的個數(shù)
  • FS field seperator域分隔符乔询, 默認為空格
  • RS record seperator記錄分隔符蔬蕊, 默認為換行符

awk支持的運算符

awk支持編程語言中幾乎所有的運算符,+ - * / ++ -- > < <= >= != && || ! += -= *= /= ?:包括但不局限于加減乘除哥谷, 自加自減岸夯, 邏輯與或非, 三目運算符等们妥。
還有兩個非常值得注意的運算符:

  • ~ !~匹配正則表達式和不匹配正則表達式
  • in 某個變量或者域是否屬于數(shù)組的成員

下面來看一個匹配和不匹配正則表達式操作符的例子
awk '$1 ~/^root/' filename,打印出來第一個域以root開頭的所有記錄

下面看一些例子

  • awk '$1 + $3 >100' filename打印所有第一個域和第三個域的和大于100的記錄
  • awk '/root/,/chico/' filename打印第一個包含root的行和第一個包含chico的行中間的所有行
  • awk '/^(no|so)/' filename打印所有以no或者so開頭的行
  • awk '/^(no|so)/ {print $2}' filename 打印所有以no或者so開頭的行的第二個域
  • awk '$1 ~ /[0-9][0-9]$/ {print $1}'filename打印以兩個數(shù)字結(jié)尾的行的第一個域
  • awk '$1 >10 && $2 <30 {print $0}' filename打印第一個域大于10并且第二個域小于30的所有行
  • awk '/^chicodong/{print $2}' filename打印以chicodong開頭的行的第二個域

在看一點復雜的猜扮, 在awk中使用變量。

比如awk '$1 ~ /^test/ {count=$2+$3;print count}' filename,count就是一個變量监婶,這個count=$1+$2是賦值操作旅赢, 必須要放在action中。上面這個例子的含義是找出所有以test開頭的行惑惶, 并且打印出來第二個域和第三個域的和煮盼。

更改域的值

看下面一個例子
awk '{$2=$1+10; print $2}' filename, 就是把第二個域的值更改為第一個域的值加10.

再看一個例子
awk '$1=="root"{$1="chico";print}' filename,如果第一個域是root,那么就把第一個域改成chico,并且打印出來。

awk內(nèi)置的函數(shù)带污, 最常用的是printf僵控, 用來格式化輸出特別方便

echo "65"|awk '{print "%c\n", $0}', 可以打印出65對應的ASCII字符串。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鱼冀,一起剝皮案震驚了整個濱河市报破,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌千绪,老刑警劉巖充易,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異荸型,居然都是意外死亡盹靴,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門瑞妇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來稿静,“玉大人,你說我怎么就攤上這事踪宠∽耘猓” “怎么了?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵柳琢,是天一觀的道長绍妨。 經(jīng)常有香客問我润脸,道長,這世上最難降的妖魔是什么他去? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任毙驯,我火速辦了婚禮,結(jié)果婚禮上灾测,老公的妹妹穿的比我還像新娘爆价。我一直安慰自己,他們只是感情好媳搪,可當我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布铭段。 她就那樣靜靜地躺著,像睡著了一般秦爆。 火紅的嫁衣襯著肌膚如雪序愚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天等限,我揣著相機與錄音爸吮,去河邊找鬼。 笑死望门,一個胖子當著我的面吹牛形娇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播筹误,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼桐早,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了纫事?” 一聲冷哼從身側(cè)響起勘畔,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤所灸,失蹤者是張志新(化名)和其女友劉穎丽惶,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體爬立,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡钾唬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了侠驯。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抡秆。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖吟策,靈堂內(nèi)的尸體忽然破棺而出儒士,到底是詐尸還是另有隱情,我是刑警寧澤檩坚,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布着撩,位于F島的核電站诅福,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏拖叙。R本人自食惡果不足惜氓润,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望薯鳍。 院中可真熱鬧咖气,春花似錦、人聲如沸挖滤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽斩松。三九已至悯舟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間砸民,已是汗流浹背抵怎。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留岭参,地道東北人反惕。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像演侯,于是被迫代替她去往敵國和親姿染。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,647評論 2 354

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

  • awk:報告生成器秒际,格式化文本輸出 內(nèi)容: awk介紹 awk基本用法 awk變量 awk格式化 awk操作符 a...
    BossHuang閱讀 1,456評論 0 9
  • 本章主要學習內(nèi)容awk介紹 ?awk基本用法 ?awk變量 ?awk格式化 ?awk操作符 ?awk條件判斷 ?a...
    楠人幫閱讀 1,269評論 0 8
  • 一悬赏,awk簡介 awk,文本處理三劍客之一,它的名稱得自于它的三個創(chuàng)始人Alfred Aho 娄徊、Peter Wei...
    千紙鶴V閱讀 2,406評論 0 6
  • 簡介 awk是一個強大的文本分析工具闽颇,相對于grep的查找,sed的編輯寄锐,awk在其對數(shù)據(jù)分析并生成報告時兵多,顯得尤...
    花丶小偉閱讀 509評論 0 0
  • awk介紹awk變量printf命令:實現(xiàn)格式化輸出操作符awk patternawk actionawk數(shù)組aw...
    哈嘍別樣閱讀 1,564評論 0 4