日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

转:shell awk

發(fā)布時(shí)間:2023/12/9 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 转:shell awk 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

簡(jiǎn)單使用:

awk :對(duì)于文件中一行行的獨(dú)處來(lái)執(zhí)行操作 。

awk -F :'{print $1,$4}' :使用‘:’來(lái)分割這一行,把這一行的第一第四個(gè)域打印出來(lái) 。

?

?

詳細(xì)介紹:

AWK命令介紹

?

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

?

1. 調(diào)用awk:

?

第一種命令行方式,:

?

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

?

這里commands是真正的awk命令,[-F域分隔符]是可選的,awk默認(rèn)使用空格分隔,因此如果要瀏覽域間有空格的文本,不必指定這個(gè)選項(xiàng),但如果瀏覽如passwd文件,此文件各域使用冒號(hào)作為分隔符,則必須使用-F選項(xiàng): awk -F : 'commands' input-file

?

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

?

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

?

awk-fawk-script-fileinput-file

?

-f選項(xiàng)指明在文件awk-script-file的awk腳本,input-file是使用awk進(jìn)行瀏覽的文件名

?

2. awk腳本:

?

awk腳本由各種操作和模式組成,根據(jù)分隔符(-F選項(xiàng)),默認(rèn)為空格,讀取的內(nèi)容依次放置到對(duì)應(yīng)的域中,一行一行記錄讀取,直到文件尾

?

2.1. 模式和動(dòng)作

?

任何awk語(yǔ)句都是由模式和動(dòng)作組成,在一個(gè)awk腳本中可能有許多語(yǔ)句。模式部分決定動(dòng)作語(yǔ)句何時(shí)觸發(fā)及觸發(fā)事件。動(dòng)作即對(duì)數(shù)據(jù)進(jìn)行的操作,如果省去模式部分,動(dòng)作將時(shí)刻保持執(zhí)行狀態(tài)

?

模式可以是任何條件語(yǔ)句或復(fù)合語(yǔ)句或正則表達(dá)式,模式包含兩個(gè)特殊字段BEGIN和END,使用BEGIN語(yǔ)句設(shè)置計(jì)數(shù)和打印頭,BEGIN語(yǔ)句使用在任何文本瀏覽動(dòng)作之前,之后文本瀏覽動(dòng)作依據(jù)輸入文件開(kāi)始執(zhí)行;END語(yǔ)句用來(lái)在awk完成文本瀏覽動(dòng)作后打印輸出文本總數(shù)和結(jié)尾狀態(tài)標(biāo)志,有動(dòng)作必須使用{}括起來(lái)

?

實(shí)際動(dòng)作在大括號(hào){}內(nèi)指明,常用來(lái)做打印動(dòng)作,但是還有更長(zhǎng)的代碼如if和循環(huán)looping語(yǔ)句及循環(huán)退出等,如果不指明采取什么動(dòng)作,awk默認(rèn)打印出所有瀏覽出的記錄

?

2.2. 域和記錄:

?

awk執(zhí)行時(shí),其瀏覽標(biāo)記為$1,$2...$n,這種方法稱為域標(biāo)記。使用$1,$3表示參照第1和第3域,注意這里使用逗號(hào)分隔域,使用$0表示使用所有域。例如:

?

awk '{print $0}' temp.txt > sav.txt

?

表示打印所有域并把結(jié)果重定向到sav.txt中

?

awk '{print $0}' temp.txt|tee sav.txt

?

和上例相似,不同的是將在屏幕上顯示出來(lái)

?

awk '{print $1,$4}' temp.txt

?

只打印出第1和第4域

?

awk 'BEGIN {print "NAME GRADE\n----"} {print $1"\t"$4}' temp.txt

?

表示打信息頭,即輸入的內(nèi)容的第一行前加上"NAME GRADE\n-------------",同時(shí)內(nèi)容以tab分開(kāi)

?

awk 'BEGIN {print "being"} {print $1} END {print "end"}' temp

?

同時(shí)打印信息頭和信息尾

?

2.3. 條件操作符:

?

<、<=、==、!=、>=、~匹配正則表達(dá)式、!~不匹配正則表達(dá)式

?

匹配:awk '{if ($4~/ASIMA/) print $0}' temp 表示如果第四個(gè)域包含ASIMA,就打印整條

?

精確匹配:awk '$3=="48" {print $0}' temp 只打印第3域等于"48"的記錄

?

不匹配: awk '$0 !~ /ASIMA/' temp 打印整條不包含ASIMA的記錄

?

不等于: awk '$1 != "asima"' temp

?

小于: awk '{if ($1<$2) print $1 "is smaller"}' temp

?

設(shè)置大小寫(xiě): awk '/[Gg]reen/' temp打印整條包含Green,或者green的記錄

?

任意字符: awk '$1 ~/^...a/' temp打印第1域中第四個(gè)字符是a的記錄,符號(hào)’^’代表行首,符合’.’代表任意字符

?

或關(guān)系匹配: awk '$0~/(abc)|(efg)/' temp 使用|時(shí),語(yǔ)句需要括起來(lái)

?

AND與關(guān)系: awk '{if ( $1=="a" && $2=="b" ) print $0}' temp

?

OR或關(guān)系: awk '{if ($1=="a" || $1=="b") print $0}' temp

?

2.4. awk內(nèi)置變量:

?

ARGC

命令行參數(shù)個(gè)數(shù)

NF

瀏覽記錄的域個(gè)數(shù)

AGRV

命令行參數(shù)排列

NR

已讀的記錄數(shù)

ENVIRON

支持隊(duì)列中系統(tǒng)環(huán)境變量的使用

OFS

輸出域分隔符

FILENAME

awk瀏覽的文件名

ORS

輸出記錄分隔符

FNR

瀏覽文件的記錄數(shù)

RS

控制記錄分隔符

FS

設(shè)置輸入域分隔符,同- F選項(xiàng)

NF

瀏覽記錄的域個(gè)數(shù)

?

例:awk'END{print NR}' temp在最后打印已讀記錄條數(shù)

?

awk '{print NF,NR,$0} END {print FILENAME}' temp

?

awk '{if (NR>0 && $4~/Brown/) print $0}' temp 至少存在一條記錄且包含Brown

?

NF的另一用法: echo $PWD | awk -F/ '{print $NF}' 顯示當(dāng)前目錄名

轉(zhuǎn)載于:https://www.cnblogs.com/yangchunli/p/7132787.html

總結(jié)

以上是生活随笔為你收集整理的转:shell awk的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。