最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

5分鐘入門AWK

2019-01-04 16:45 作者:動(dòng)力節(jié)點(diǎn)  | 我要投稿

AWK是Linux上卓越的文本處理工具,它具有非常簡(jiǎn)單的語法結(jié)構(gòu),擁有強(qiáng)大的文本處理能力。AWK 是一種解釋執(zhí)行的編程語言,AWK 的名稱是由它們?cè)O(shè)計(jì)者的名字縮寫而來 —— Afred Aho, Peter Weinberger 與 Brian?Kernighan。

?

目前總共有如下幾種不同的 AWK 版本。

AWK——這個(gè)版本是 AWK 最原初的版本,它由 AT&T 實(shí)驗(yàn)室開發(fā)。

NAWK ——NAWK(New AWK)是 AWK 的改進(jìn)增強(qiáng)版本。

GAWK—— GAWK 即 GNU AWK,所有的 GNU/Linux 發(fā)行版都包括 GAWK,且 GAWK 完全兼容 AWK 與 NAWK。

?

AWK 可以做非常多的工作。 下面只是其中部分 AWK 的典型應(yīng)用場(chǎng)景:

文本處理,

生成格式化的文本報(bào)告,

進(jìn)行算術(shù)運(yùn)算,

字符串操作,以及其它更多。

?

linux 默認(rèn)安裝了gawk,使用which gawk,如果輸出/bin/gawk,說明已經(jīng)安裝了gawk,否則需要我們安裝,可以使用 yum 包管理工具安裝:

[root]# yum install gawk

?

另外我們也可以通過源碼編譯的方式安裝gawk:

step 1——從可信的源下載源代碼??梢栽诿钚惺褂?wget 命令下載。

[jerry]$ wget http://ftp.gnu.org/gnu/gawk/gawk-4.1.1.tar.xz

step 2——解壓并提取下載的源代碼。

[jerry]$ tar xvf gawk-4.1.1.tar.xz

step 3——切換至解壓后的目錄并運(yùn)行 configure 命令

[jerry]$ ./configure

step 4——configure 命令成功執(zhí)行后會(huì)生成一個(gè) Makefile 文件。 接下來使用 make 命令編譯源代碼。

[jerry]$ make

step 5——你可以運(yùn)行測(cè)試工具保證 build 是干凈的。 這一步是可選的。

[jerry]$ make check

step 6——最后一步,安裝 AWK。 安裝前請(qǐng)確認(rèn)你有超級(jí)用戶的權(quán)限。

[jerry]$ sudo make install

通過以上六個(gè)步驟,你就成功地編譯并安裝了 AWK。 你可以通過如下的命令來確認(rèn) awk 安裝成功:

?

gawk的版本通過: gawk --version 查看

[jerry]$ which awk

執(zhí)行上面的命令,你將會(huì)得到如下的結(jié)果:

/usr/bin/awk

?

awk的工作流程:

讀( Read )、執(zhí) 行( Execute )與重復(fù)( Repeat )

讀入一行執(zhí)行一行,直到文件末尾。

?

gawk的程序結(jié)構(gòu):

開始?jí)K(BEGIN block),以大寫B(tài)EGIN開頭,必須大寫,這一部分是可選的,可有可無。如:

BEGIN {awk-commands}

主體塊(Body Block),如:

/pattern/ {awk-commands}

結(jié)束塊(END Block),以大寫END結(jié)束,必須大寫,這一部分是可選的,可有可無。如:

END {awk-commands}

?

awk的整體語法格式是: awk '/pattern/ {action}' file?

其中單引號(hào)是為了和shell命令區(qū)分開;

/pattern/ 是一個(gè)過濾器,匹配這個(gè)模式的行才會(huì)被action的命令處理;

{}是一個(gè)命令組,action是具體執(zhí)行的命令;

file是要處理的文件

其中/pattern/ 和{action}必須要有一個(gè),

awk可以直接在命令行執(zhí)行執(zhí)行命令,也可以通過編寫好腳本,然后執(zhí)行腳本。

通過命令行的方式:

輸出marks.txt文件的內(nèi)容:

[jerry]$ awk '{print}' marks.txt?

再比如輸出tomcat日志:

gawk '{print}' /usr/local/apache-tomcat-8.0.30/logs/catalina.out

另外一種提供 AWK 命令的方式——通過腳本文件提供:

awk [option] -f file ....

首先,創(chuàng)建一個(gè)文本文件 command.awk,在文件中輸入如下 AWK 命令:

{print}

現(xiàn)在,我們可以調(diào)用 AWK 從文本文件中讀入命令并執(zhí)行。這里,我們實(shí)現(xiàn)了與上面例子相同的效果:

[jerry]$ awk -f command.awk marks.txt

awk有一些標(biāo)準(zhǔn)選項(xiàng):

-v 選項(xiàng)

這個(gè)選項(xiàng)可以為變量賦值。它允許在程序執(zhí)行之前為變量賦值。下面是一個(gè) -v 選項(xiàng)使用的示例程序:

[jerry]$ awk -v name=Jerry 'BEGIN{printf "Name = %s\n", name}'

執(zhí)行上面的命令可以得到如下的結(jié)果:

Name = Jerry

--dump-variables[=file] 選項(xiàng)

此選項(xiàng)會(huì)將全局變量及相應(yīng)值按序輸出到指定文件中。默認(rèn)的輸出文件名是 awkvars.out。

[jerry]$ awk --dump-variables ''

[jerry]$ cat awkvars.out?

?

awk的基本使用示例:

默認(rèn)情況下,如果某行與模式串匹配,AWK 會(huì)將整行輸出:

[jerry]$ awk '/a/ {print}' marks.txt

這個(gè)輸出marks.txt文件中匹配 a 字符的所在行。

輸出某一列,比如輸出第三列:

[jerry]$ awk '/a/ {print $3}' marks.txt

統(tǒng)計(jì)模式串成功匹配的次數(shù),并將該結(jié)果打印出來:

[jerry]$ awk '/JVM/ {++count} END {print count }' catalina.out?

輸出字符數(shù)多于 18 的行:

[jerry]$ awk 'length($0) > 18' marks.txt

查詢文件中匹配的字符:

awk '/uid=10001/' catalina.out

在catalina.out文件中找匹配uid=10001的行,和 grep類似的功能。

awk '/uid=10*/' catalina.out

awk數(shù)組操作,比如刪除數(shù)組的元素:

[jerry]$ awk 'BEGIN {

fruits["mango"]="yellow";

fruits["orange"]="orange";

delete fruits["orange"];

print fruits["orange"]

}'

awk的邏輯語言ifelse:

[jerry]$ awk 'BEGIN {

a=30;

if (a==10)

? print "a = 10";

else if (a == 20)

? print "a = 20";

else if (a == 30)

? print "a = 30";

}'

awk的循環(huán):

[jerry]$ awk 'BEGIN { for (i = 1; i <= 5; ++i) print i }'

[jerry]$ awk 'BEGIN {i = 1; while (i < 6) { print i; ++i } }'

awk里面有很多內(nèi)置函數(shù),數(shù)學(xué)函數(shù),字符串函數(shù),日期函數(shù)等。

還可以自定義函數(shù)。

awk也可以把輸出重定向到文件:

[jerry]$ awk 'BEGIN { print "Hello, World !!!" > "/tmp/message.txt" }'

>> 雙大于號(hào)是追加。

awk也可以使用管道:

[jerry]$ awk 'BEGIN { print "hello, world !!!" | "tr [a-z] [A-Z]" }'


5分鐘入門AWK的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
林芝县| 舒城县| 铜鼓县| 津南区| 房山区| 四川省| 古交市| 巴里| 济宁市| 河南省| 惠来县| 迁西县| 西藏| 连南| 木兰县| 大冶市| 土默特右旗| 岳普湖县| 衡山县| 旌德县| 张家口市| 五华县| 甘泉县| 五家渠市| 电白县| 福海县| 夹江县| 亚东县| 上杭县| 阿克陶县| 蕉岭县| 永兴县| 利辛县| 上饶市| 阳新县| 克东县| 金沙县| 秀山| 岳阳市| 嘉兴市| 天峻县|