0?前言
在編寫(xiě)Linux Shell腳本的過(guò)程中,我們經(jīng)常要對(duì)Linux命令執(zhí)行的結(jié)果進(jìn)行分析和提取,Linux也在文本分析和提取這方面提供了不少的命令。比如我們之前研究過(guò)的cut命令。
Linux shell編程學(xué)習(xí)筆記43:cut命令https://blog.csdn.net/Purpleendurer/article/details/135730679?spm=1001.2014.3001.5501
除了cut命令,我們還需要繼續(xù)研究其他相關(guān)的命令。
今天我們先研究 awk命令。
1 awk命令的由來(lái)
AWK 命令是取了三位創(chuàng)建人??Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的?姓氏(Family Name) 的首字符來(lái)構(gòu)成。
實(shí)際上 AWK 擁有自己的程序設(shè)計(jì)語(yǔ)言 ——“樣式掃描和處理語(yǔ)言”,這種語(yǔ)言允許您創(chuàng)建簡(jiǎn)短的程序,這些程序讀取輸入文件、為數(shù)據(jù)排序、處理數(shù)據(jù)、對(duì)輸入執(zhí)行計(jì)算以及生成報(bào)表,還有無(wú)數(shù)其他的功能。
2 awk命令的功能、格式和選項(xiàng)說(shuō)明
我們可以使用 awk --help命令查看 awk 命令的幫助信息。
purpleEndurer @ bash ~ $ awk --help
Usage: awk [POSIX or GNU style options] -f progfile [--] file ...
Usage: awk [POSIX or GNU style options] [--] 'program' file ...
POSIX options: ? ? ? ? ?GNU long options: (standard)
? ? ? ? -f progfile ? ? ? ? ? ? --file=proTo report bugs, see node `Bugs' in `gawk.info', which is
section `Reporting Problems and Bugs' in the printed version.gawk is a pattern scanning and processing language.
By default it reads standard input and writes standard output.Examples:
? ? ? ? gawk '{ sum += $1 }; END { print sum }' file
? ? ? ? gawk -F: '{ print $1 }' /etc/passwdpurpleEndurer @ bash ~ $?
2.1 awk命令的功能
awk是處理文本文件的一個(gè)應(yīng)用程序,它依次處理文件的每一行,并讀取里面的每一個(gè)字段。
對(duì)于日志、CSV 那樣的每行格式相同的文本文件,awk可能是最方便的工具。
2.2 awk命令的格式
awk [選項(xiàng)] -f 腳本文件 [--] 文件?...
?或
awk [選項(xiàng)] [--] '程序' 文件?...
2.3 awk命令的選項(xiàng)
POSIX 選項(xiàng) | GNU 長(zhǎng)選項(xiàng): (標(biāo)準(zhǔn) ) | 功能 | 備注 |
---|---|---|---|
-f progfile | --file=progfile | 從腳本文件中讀取awk程序源代碼,而不是從第一個(gè)?非選項(xiàng)?參數(shù)中讀取。此選項(xiàng)可以多次給出;AWK 程序由每個(gè)指定源文件的內(nèi)容串聯(lián)組成。 |
以 -f 命名的文件被視為開(kāi)頭有“@namespace ”awk“。 |
-F fs | --field-separator=fs | 指定輸入文件折分符,fs是一個(gè)字符串或者是一個(gè)正則表達(dá)式,如-F | |
-v var=val | --assign=var=val | 在程序開(kāi)始執(zhí)行之前,將變量 var 設(shè)置為值 val | 此類變量值在 BEGIN 規(guī)則中可用。 使用 -v 設(shè)置內(nèi)置變量的值可能會(huì)導(dǎo)致令人驚訝的結(jié)果。AWK 將根據(jù)需要重置這些變量的值,可能會(huì)忽略您可能給出的任何初始值。 |
短選項(xiàng) | GNU長(zhǎng)選項(xiàng): (擴(kuò)展) | 功能 |
---|---|---|
-b | --characters-as-bytes | 使 gawk 將所有輸入數(shù)據(jù)視為單字節(jié)字符。此外,所有使用 print 或 printf 寫(xiě)入的輸出都被視為單字節(jié)字符。 通常,gawk 遵循 POSIX 標(biāo)準(zhǔn),并嘗試根據(jù)當(dāng)前語(yǔ)言環(huán)境處理其輸入數(shù)據(jù)。這通常涉及將多字節(jié)字符轉(zhuǎn)換為寬字符(內(nèi)部),如果輸入數(shù)據(jù)不包含有效的多字節(jié)字符,則可能會(huì)導(dǎo)致問(wèn)題或混淆。此選項(xiàng)是告訴 gawk “放開(kāi)我的數(shù)據(jù)!“ |
-c | --traditional | 指定兼容模式,在該模式下,禁用 awk 語(yǔ)言的 GNU 擴(kuò)展,以便 gawk 的行為與 BWK 一樣 |
-C | --copyright | 打印版權(quán)信息 |
-d[file] | --dump-variables[=file] | 將全局變量、其類型和最終值的排序列表打印到文件中。如果未提供任何文件,此列表將打印到當(dāng)前目錄中名為 awkvars.out 的文件中。 如果提供了 file,則 -d 和 file 之間不允許有空格。 |
-e 'program-text' | --source='program-text' | 使用program-text作為源代碼,可與-f命令混用。 此選項(xiàng)允許您將文件中的源代碼與您在命令行中輸入的源代碼混合使用。 當(dāng)您要從命令行程序使用的庫(kù)函數(shù)時(shí),這特別有用 |
-E file | --exec=file | 與 -f 類似,從文件中讀取 awk 程序文本。 與 -f 有兩個(gè)區(qū)別: 此選項(xiàng)終止選項(xiàng)處理;命令行上的任何其他內(nèi)容都直接傳遞給 AWK 程序。 對(duì)于通過(guò) URL 傳遞參數(shù)的萬(wàn)維網(wǎng) CGI 應(yīng)用程序,此選項(xiàng)尤其必要。用此選項(xiàng)可防止惡意(或其他)用戶將選項(xiàng)、分配或 awk 源代碼(通過(guò) -e)傳遞給 CGI 應(yīng)用程序。 ?此選項(xiàng)應(yīng)與 '#!' 腳本一起使用(請(qǐng)參閱可執(zhí)行 awk 程序),如下所示: #!/usr/local/bin/gawk -E |
-g | --gen-pot | 分析源程序,并在標(biāo)準(zhǔn)輸出上為所有標(biāo)記為翻譯的字符串常量生成一個(gè) GNU gettext 可移植對(duì)象模板文件 |
-h | --help | 顯示幫助信息 |
-L [fatal] | --lint[=fatal] | 警告可疑或不可移植到其他 awk 實(shí)現(xiàn)的構(gòu)造。如果提供了值,則 -L 和值之間不允許有空格。當(dāng) gawk 第一次讀取您的程序時(shí),會(huì)發(fā)出一些警告。其他的則在運(yùn)行時(shí)發(fā)出,因?yàn)槌绦蛘趫?zhí)行。 |
-n | --non-decimal-data | 啟用輸入數(shù)據(jù)中八進(jìn)制和十六進(jìn)制值的自動(dòng)解釋。 注意:此選項(xiàng)可能會(huì)嚴(yán)重破壞舊程序。請(qǐng)小心使用。另請(qǐng)注意,此選項(xiàng)可能會(huì)在 gawk 的未來(lái)版本中消失。 |
-O | --optimize | 啟用 gawk 對(duì)程序內(nèi)部表示的默認(rèn)優(yōu)化。目前,這僅包括簡(jiǎn)單的恒定折疊。 默認(rèn)情況下,優(yōu)化處于啟用狀態(tài)。此選項(xiàng)主要用于向后兼容。但是,它可用于取消早期 -s 選項(xiàng)的效果(請(qǐng)參閱此列表的后面部分)。 |
-p[file] | --profile[=file] | 啟用 awk 程序的分析。 暗示 --no-optimize。默認(rèn)情況下,配置文件在名為 awkprof.out 的文件中創(chuàng)建。可選的 file 參數(shù)允許您為配置文件指定不同的文件名。如果提供了 file,則 -p 和 file 之間不允許有空格。 配置文件在左邊距包含程序中每個(gè)語(yǔ)句的執(zhí)行計(jì)數(shù),以及每個(gè)函數(shù)的函數(shù)調(diào)用計(jì)數(shù)。 |
-P | --posix | 打開(kāi)兼容模式。但有以下限制,不識(shí)別:/x、函數(shù)關(guān)鍵字、func、換碼序列以及當(dāng)fs是一個(gè)空格時(shí),將新行作為一個(gè)域分隔符;操作符和=不能代替^和^=;fflush無(wú)效。 |
-r | --re-interval | 允許間隔正則表達(dá)式的使用,參考(grep中的Posix字符類),如括號(hào)表達(dá)式[[:alpha:]]。 |
-S | --sandbox | 禁用 system() 函數(shù)、使用 getline 的輸入重定向、使用 print 和 printf 的輸出重定向以及動(dòng)態(tài)擴(kuò)展。此外,不允許向 ARGV 添加 gawk 開(kāi)始運(yùn)行時(shí)不存在的文件名。當(dāng)您想要從可疑來(lái)源運(yùn)行 awk 腳本并需要確保腳本無(wú)法訪問(wèn)您的系統(tǒng)(指定的輸入數(shù)據(jù)文件除外)時(shí),這特別有用。 |
-t | --lint-old | 打印關(guān)于不能向傳統(tǒng)unix平臺(tái)移植的結(jié)構(gòu)的警告。 |
-V | --version | 打印版本信息。 |
2.4?其它說(shuō)明
幾乎所有 Linux 系統(tǒng)都自帶awk這個(gè)程序。
awk有3個(gè)不同版本: awk、nawk和gawk,如果沒(méi)有作特別說(shuō)明,一般指gawk,gawk 是 AWK 的 GNU 版本。
3 awk命令基本用法使用實(shí)例
3.1?awk -C:打印版權(quán)信息
purpleEndurer @ bash ~ $ awk -C
Copyright (C) 1989, 1991-2012 Free Software Foundation.This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ?See the
GNU General Public License for more details.You should have received a copy of the GNU General Public License
along with this program. If not, see http://www.gnu.org/licenses/.
purpleEndurer @ bash ~ $?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-857007.html
3.2?awk -V:打印版本信息
purpleEndurer @ bash ~ $ awk -V
GNU Awk 4.0.2
Copyright (C) 1989, 1991-2012 Free Software Foundation.This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ?See the
GNU General Public License for more details.You should have received a copy of the GNU General Public License
along with this program. If not, see http://www.gnu.org/licenses/.
purpleEndurer @ bash ~ $?
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-857007.html
到了這里,關(guān)于Linux shell編程學(xué)習(xí)筆記46:awk命令的由來(lái)、功能、格式、選項(xiàng)說(shuō)明、版權(quán)、版本的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!