linux文本命令awk linux文本處理常用命令

linux里awk是做什么的,請(qǐng)?jiān)敿?xì)說(shuō)明

awk是一個(gè)強(qiáng)大的文本分析工具,相對(duì)于grep的查找,sed的編輯,awk在其對(duì)數(shù)據(jù)分析并生成報(bào)告時(shí),顯得尤為強(qiáng)大。簡(jiǎn)單來(lái)說(shuō)awk就是把文件逐行的讀入,以空格為默認(rèn)分隔符將每行切片,切開(kāi)的部分再進(jìn)行各種分析處理。

為烏海海南等地區(qū)用戶(hù)提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及烏海海南網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為做網(wǎng)站、成都網(wǎng)站制作、烏海海南網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶(hù)提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶(hù)的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

awk有三個(gè)不同的版本:awk、nawk和gawk,未作特別說(shuō)明,一般指gawk,gawk是awk的GNU版本。

之所以叫awk是因?yàn)槠淙×巳粍?chuàng)始人Alfred Aho,Peter Weinberger,和Brian Kernighan的Family Name

的首字符。

使用方法:

awk'{pattern+action}'{filenames}

盡管操作可能會(huì)很復(fù)雜,但語(yǔ)法總是這樣,其中pattern表示awk在數(shù)據(jù)中查找的內(nèi)容,而action是在找到匹配內(nèi)容時(shí)所執(zhí)行的一系列命令。花括號(hào)({})不需要在程序中始終出現(xiàn),但它們用于根據(jù)特定的模式對(duì)一系列指令進(jìn)行分組。pattern就是要表示的正則表達(dá)式,用斜杠括起來(lái)。

awk語(yǔ)言的最基本功能是在文件或者字符串中基于指定規(guī)則瀏覽和抽取信息,awk抽取信息后,才能進(jìn)行其他文本操作。完整的awk腳本通常用來(lái)格式化文本文件中的信息。

通常,awk是以文件的一行為處理單位的。awk每接收文件的一行,然后執(zhí)行相應(yīng)的命令,來(lái)處理文本。

調(diào)用awk的三種方式

1、命令行方式

awk[-F field-separator]'commands'input-file(s)

其中,commands是真正awk命令,[-F域分隔符]是可選的。input-file(s)是待處理的文件。

在awk中,文件的每一行中,由域分隔符分開(kāi)的每一項(xiàng)稱(chēng)為一個(gè)域。通常,在不指名-F域分隔符的情況下,默認(rèn)的域分隔符是空格。

2、shell腳本方式

將所有的awk命令插入一個(gè)文件,并使awk程序可執(zhí)行,然后awk命令解釋器作為腳本的首行,一遍通過(guò)鍵入腳本名稱(chēng)來(lái)調(diào)用。

相當(dāng)于shell腳本首行的:#!/bin/sh

可以換成:#!/bin/awk

3、將所有的awk命令插入一個(gè)單獨(dú)文件,然后調(diào)用:

awk-f awk-script-file input-file(s)

其中,-f選項(xiàng)加載awk-script-file中的awk腳本,input-file(s)跟上面的是一樣的。

每日一條linux 命令 : awk

一次讀取一行文本,按輸入分隔符進(jìn)行切片,切成多個(gè)組成部分,將每片直接保存在內(nèi)建的變量中,$1,$2,$3....,引用指定的變量,可以顯示指定段,或者多個(gè)段。如果需要顯示全部的,需要使用$0來(lái)引用??梢詫?duì)單個(gè)片段進(jìn)行判斷,也可以對(duì)所有段進(jìn)行循環(huán)判斷。

其默認(rèn)分隔符為空格

awk [options] 'program' FILE......

[options]說(shuō)明

主要有兩種模式

1、 awk [options] 'scripts' file1,file2.....

在這種模式中,scripts主要是命令的堆砌,命令之間用 分號(hào) 分割;對(duì)輸入的文本行進(jìn)行處理,通過(guò)命令 print,printf 或是輸出重定向的方式顯示出來(lái),這里經(jīng)常用到的知識(shí)點(diǎn)是:awk的內(nèi)置變量,以及命令print和printf的使用

2、 awk [options] 'PATTERN{action}' file,file2.....

在這種模式中,最重要的是5種模式和5種action的使用,以及awk的數(shù)組的使用和內(nèi)置函數(shù)

其格式化輸出: printf FORMAT,item1,item2....

例子: awk '{printf "%-8s %-8s %-8s %-18s %-22s %-15s\n",$1,$2,$3,$4,$5,$6}' netstat.txt

格式符

修飾符

輸出重定向

awk [option] 'PATTERN{action}' file1,file2....

Linux入門(mén)系列——awk命令詳解

awk是一個(gè)強(qiáng)大的文本分析工具,與grep、sed相比,awk在對(duì)數(shù)據(jù)分析并生成報(bào)告時(shí),顯得有很大的優(yōu)勢(shì)。

awk有三個(gè)不同的版本:awk、nawk和gawk,在沒(méi)有做特殊說(shuō)時(shí)的時(shí)候默認(rèn)的就是gawk,gawk是awk的GNU版本。

其中command是真正的awk命令,-F表示域的分隔符,是個(gè)可選項(xiàng)。Filename是等待處理的文件

將所有的awk命令寫(xiě)入到一個(gè)文件,并使用該文件有X權(quán)限,然后awk命令解釋器作為腳本的首行,也就是說(shuō)可以把腳本最開(kāi)始的 #!/bin/bash 換成 #!/bin/awk

最后直接執(zhí)行這個(gè)腳本文件就行了。

-f 指定要加載的awk腳本,是一個(gè)文件。Filename是等待處理的文件

awk的工作流程是這樣的:讀入一行后(最后面帶有” ”的),就按-F指定的分隔符來(lái)將該行劃分成N個(gè)區(qū)域,$0表示所有的區(qū)域,$1表示第一個(gè)域,$2表示第二個(gè)域,依此類(lèi)推,$n表示第n個(gè)域。

總結(jié):awk先執(zhí)行BEGIN內(nèi)的命令,然后再讀入文件中的行,接著就是按照指定的分隔符將該行分成N個(gè)區(qū)域,然后再來(lái)執(zhí)行模式所對(duì)應(yīng)的動(dòng)作action。然后,再來(lái)讀入第二行。。再重復(fù)執(zhí)行action,直到所有的行都處理完成。最后再執(zhí)行END中的命令。

注意:' // '之間是支持正則表達(dá)式的,如果此處只有pattern,而沒(méi)有action,那么awk默認(rèn)會(huì)把匹配到的行打印出來(lái)。

awk中的print還可以使用C語(yǔ)言中的printf來(lái)替代。在輸出格式比較復(fù)雜的時(shí)候使用printf函數(shù)會(huì)比print函數(shù)要更直觀一些,如下:

還可以使用-v key=value來(lái)自定義變量。如下:

awk中的條件語(yǔ)句是從C中借鑒過(guò)來(lái)的

語(yǔ)法:if (condition) {then-body} else {else-body}

例如使用awk來(lái)統(tǒng)計(jì)某個(gè)目錄下的普通文件的大小,不包括子目錄的,并過(guò)濾掉目錄。

循環(huán)語(yǔ)句也和C中的一樣,支持while、do/while、for、continue、break等關(guān)鍵字。

break和continue常用于循環(huán)中;

在awk中,數(shù)組的下標(biāo)可以是數(shù)字或字母。一般awk中的數(shù)組的作用是從記錄中收集信息,用于計(jì)算總和、統(tǒng)計(jì)單詞等。

在awk中要?jiǎng)h除一個(gè)元素的時(shí)候使用 delete array[index]

更多請(qǐng)參見(jiàn)awk官方文檔[]

Linux:使用awk進(jìn)行高級(jí)文本處理

awk由三部分組成,BEGIN,END,和帶模式匹配選項(xiàng)的常見(jiàn)語(yǔ)句塊,這三部分都是可選項(xiàng)

NR:表示記錄數(shù)量,在執(zhí)行過(guò)程中對(duì)應(yīng)于當(dāng)前的行號(hào)

NF:表示字段數(shù)量,在執(zhí)行過(guò)程中對(duì)應(yīng)于當(dāng)前行的字段數(shù)

將外部變量值傳遞給awk

用getline讀取行

AWK通常默認(rèn)讀取一個(gè)文件的所有行,如果只想讀取某一行,可以使用getline函數(shù)

語(yǔ)法:getline var

使用過(guò)濾模式對(duì)awk處理的行進(jìn)行過(guò)濾

設(shè)置字段界定符 ,默認(rèn)字段是空格

模式:-F "delimiter"

Linux 簡(jiǎn)單使用awk命令

我使用awk命令時(shí),用的次數(shù)最多的是 從stdin或文件里選取幾列輸出 。

awk的print語(yǔ)句:

很久之前,在python celery文檔里見(jiàn)過(guò)下面的這個(gè)命令,正是因?yàn)楫?dāng)時(shí)看不懂這個(gè)命令,才開(kāi)始淺學(xué)awk和xargs。

分享題目:linux文本命令awk linux文本處理常用命令
文章地址:http://muchs.cn/article16/hjcgdg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站外貿(mào)網(wǎng)站建設(shè)、、用戶(hù)體驗(yàn)、品牌網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)