AWK 使用總結(jié)

原文地址

awk 是處理文本的工具,Mac 自帶這個程序盅粪。

適合文本比較復雜的格式化數(shù)據(jù)蝇裤。

基本語法

awk [可選參數(shù)] [模式-動作] 文件名

awk 會一行一行的處理文件里面的內(nèi)容。

可選參數(shù)說明:
  • -F 指定分隔符, 默認是以空格作為分隔符;
  • -f 從腳本文件中讀取 awk 命令;

可選參數(shù)可以省略粘室。

模式-動作 說明:

其中模式可以有 0 個或者多個,每一行的內(nèi)容會依次測試每個模式切威,所有的模式都匹配之后育特,會執(zhí)行相應(yīng)的動作。

每個模式或者動作里面可以使用 awk 中的 運算符先朦, 內(nèi)置變量內(nèi)置函數(shù)等犬缨。

假設(shè)有一個 emp.data 文件喳魏, 里面內(nèi)容是部分 NBA 球員的姓名,身高怀薛, 年齡的數(shù)據(jù):

Stephen Curry, 1.91, 31
Kevin Durant, 2.06, 30
LeBron James, 2.03, 34
Russell Westbrook, 1.92, 30
Kyrie Lrving, 1.90, 27
  1. 沒有模式

輸出每一行的內(nèi)容, 使用如下命令:

awk '{print $0}' emp.data 

結(jié)果如下:

Stephen Curry, 1.91, 31
Kevin Durant, 2.06, 30
LeBron James, 2.03, 34
Russell Westbrook, 1.92, 30
Kyrie Lrving, 1.90, 27

輸出第一列的內(nèi)容, 使用如下命令:

awk '{print $1}' emp.data

結(jié)果如下:

Stephen
Kevin
LeBron
Russell
Kyrie

發(fā)現(xiàn)第一列的姓名沒有顯示完全, 因為 awk 默認是以空格作為分隔符的刺彩,如果需要顯示完全需要我們顯示的指定分隔符。

輸出每個人的名字, 使用如下命令:

awk -F "," '{print $1}' emp.data

結(jié)果如下:

Stephen Curry
Kevin Durant
LeBron James
Russell Westbrook
Kyrie Lrving

輸出每個球員名字的小寫字母, 使用如下命令:

awk -F "," ' {print tolower($1)}' emp.data

結(jié)果如下:

stephen curry
kevin durant
lebron james
russell westbrook
kyrie lrving
  1. 單個模式

輸出年齡大于30歲的球員的姓名和身高, 使用如下命令:

awk -F "," '$3 > 30 {print $1, $2}' emp.data

結(jié)果如下:

Stephen Curry  1.91
LeBron James  2.03

輸出姓名大于12個字符(含空格)的球員信息, 使用如下命令:

awk -F "," 'length($1) > 12 {print $0}' emp.data

結(jié)果如下:

Stephen Curry, 1.91, 31
Russell Westbrook, 1.92, 30
  1. 多個模式

輸出年齡大于30歲,并且身高大于2米的球員的信息创倔,使用如下命令:

awk -F "," '$3 > 30 &&  $2 > 2.00 {print $0}' emp.data

結(jié)果如下:

LeBron James, 2.03, 34

awk 腳本

語法結(jié)構(gòu)如下:

BEGIN {放置的是執(zhí)行前的語句}
{處理每一行時要執(zhí)行的語句}
END {處理完所有的行后要執(zhí)行的語句}

其中 BEGINEND 都是可選的嗡害。

統(tǒng)計所有球員的總身高,使用如下命令:

awk -F "," '{sum+=$2} END {print sum}' emp.data

其中 sum 為自定義的變量畦攘, $2 為內(nèi)置變量霸妹,表示第二列的值。

結(jié)果如下:

9.82

運算符

運算符 描述
= += -= *= /= %= ^= **= 賦值
?: C條件表達式
|| 邏輯或
&& 邏輯與
~ ~! 匹配正則表達式和不匹配正則表達式
< <= > >= != == 關(guān)系運算符
空格 連接
+ - 加知押,減
* / % 乘叹螟,除與求余
+ - ! 一元加,減和邏輯非
^ *** 求冪
++ -- 增加或減少台盯,作為前綴或后綴
$ 字段引用
in 數(shù)組成員

變量

$ + 數(shù)字 表示某個字段: $1 表示第一個字段罢绽, $2 表示第二個字段, $3 表示第三個字段, … , $0 表示一整行静盅。

變量 NF 表示當前行有多少個字段良价。

變量 NR 表示當前是第幾行。

其他常用變量:

  • FILENAME:當前文件名
  • FS:字段分隔符蒿叠,默認是空格和制表符棚壁。
  • RS:行分隔符,用于分割每一行栈虚,默認是換行符袖外。
  • OFS:輸出字段的分隔符,用于打印時分隔字段魂务,默認為空格曼验。
  • ORS:輸出記錄的分隔符,用于打印時分隔記錄粘姜,默認為換行符鬓照。
  • OFMT:數(shù)字輸出的格式,默認為%.6g孤紧。

函數(shù)

常用的函數(shù)如下:

  • tolower():字符轉(zhuǎn)為小寫豺裆。
  • toupper(): 字符串轉(zhuǎn)為大寫。
  • length():返回字符串長度号显。
  • substr():返回子字符串臭猜。
  • sin():正弦。
  • cos():余弦押蚤。
  • sqrt():平方根蔑歌。
  • rand():隨機數(shù)。

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

參考

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末园匹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子劫灶,更是在濱河造成了極大的恐慌裸违,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件本昏,死亡現(xiàn)場離奇詭異供汛,居然都是意外死亡,警方通過查閱死者的電腦和手機凛俱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門紊馏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蒲犬,你說我怎么就攤上這事朱监。” “怎么了原叮?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵赫编,是天一觀的道長。 經(jīng)常有香客問我奋隶,道長擂送,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任唯欣,我火速辦了婚禮嘹吨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘境氢。我一直安慰自己蟀拷,他們只是感情好,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布萍聊。 她就那樣靜靜地躺著问芬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪寿桨。 梳的紋絲不亂的頭發(fā)上此衅,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音亭螟,去河邊找鬼挡鞍。 笑死,一個胖子當著我的面吹牛媒佣,可吹牛的內(nèi)容都是我干的匕累。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼默伍,長吁一口氣:“原來是場噩夢啊……” “哼欢嘿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起也糊,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤炼蹦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后狸剃,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體掐隐,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年钞馁,在試婚紗的時候發(fā)現(xiàn)自己被綠了虑省。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡僧凰,死狀恐怖探颈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情训措,我是刑警寧澤伪节,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站绩鸣,受9級特大地震影響怀大,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜呀闻,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一化借、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧捡多,春花似錦蓖康、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至淫奔,卻和暖如春山涡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背唆迁。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工鸭丛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人唐责。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓鳞溉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鼠哥。 傳聞我的和親對象是個殘疾皇子熟菲,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

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

  • 轉(zhuǎn)載 原文的排版和內(nèi)容都更加友好,并且詳細,我只是在這里貼出了一部分留作自己以后參考和學習,如希望更詳細了解AWK...
    XKirk閱讀 3,188評論 2 25
  • awk介紹awk變量printf命令:實現(xiàn)格式化輸出操作符awk patternawk actionawk數(shù)組aw...
    哈嘍別樣閱讀 1,549評論 0 4
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,367評論 0 5
  • Linux指令中文說明傳送入口 整理自Linux指令中文說明 文本和數(shù)據(jù)進行處理的編程語言awk 是一種編程語言看政,...
    釋閑人閱讀 2,107評論 1 6
  • awk:報告生成器,格式化文本輸出 內(nèi)容: awk介紹 awk基本用法 awk變量 awk格式化 awk操作符 a...
    BossHuang閱讀 1,452評論 0 9