變量 |
說明 |
$n | 當(dāng)前記錄的第n個(gè)字段,字段間由FS分隔。 |
$0 | 完整的輸入記錄。 |
ARGC | 命令行參數(shù)的數(shù)目。 |
ARGIND | 命令行中當(dāng)前文件的位置(從0開始算)。 |
ARGV | 包含命令行參數(shù)的數(shù)組。 |
BINMODE | 在非POSIX系統(tǒng)上,這個(gè)變量指定的所有I / O使用二進(jìn)制模式 |
CONVFMT | 數(shù)字轉(zhuǎn)換格式(默認(rèn)值為%.6g) |
ENVIRON | 環(huán)境變量關(guān)聯(lián)數(shù)組。 |
ERRNO | 最后一個(gè)系統(tǒng)錯(cuò)誤的描述。 |
FIELDWIDTHS | 字段寬度列表(用空格鍵分隔)。 |
FILENAME | 當(dāng)前文件名。 |
FNR | 同NR,但相對(duì)于當(dāng)前文件 |
FPAT |
這是一個(gè)正則表達(dá)式(字符串),告訴gawk基于匹配正則表達(dá)式的文本來創(chuàng)建字段 |
FS | 字段分隔符(默認(rèn)是任何空格)。 |
IGNORECASE | 如果為真,則進(jìn)行忽略大小寫的匹配。 |
LINT |
當(dāng)這個(gè)變量為真(非零或非空),gawk的行為猶如"--lint"命令行選項(xiàng) |
NF | 當(dāng)前記錄中的字段數(shù)。 |
NR | 當(dāng)前記錄數(shù)。 |
OFMT | 數(shù)字的輸出格式(默認(rèn)值是%.6g)。 |
OFS | 輸出字段分隔符(默認(rèn)值是一個(gè)空格)。 |
ORS | 輸出記錄分隔符(默認(rèn)值是一個(gè)換行符)。 |
PROCINFO |
這個(gè)數(shù)組的元素提供訪問運(yùn)行awk程序的信息 |
RLENGTH | 由match函數(shù)所匹配的字符串的長度。 |
RS | 記錄分隔符(默認(rèn)是一個(gè)換行符)。 |
RT | 每次一條記錄被讀取的設(shè)置 |
RSTART | 由match函數(shù)所匹配的字符串的第一個(gè)位置。 |
SUBSEP |
數(shù)組下標(biāo)分隔符(默認(rèn)值是\034)。 |
TEXTDOMAIN | 此變量用于程序的國際化 |
藍(lán)色為新增加的內(nèi)置變量。
簡單舉例:
1.
01.sed 1q /etc/passwd | awk '{ FS = ":"; print $1 }'
打印密碼第一行,用冒號(hào)分隔符
2.
打印文本FILENAME
3. seq 100 | awk 'NR==4,NR==6'
打印4到6行
再介紹幾個(gè)awk內(nèi)置的字符串函數(shù),也講一部分。
length(string):
返回字符串的長度
index(string,serch_string):
返回search_string在字符串中出現(xiàn)的位置
split(string,array,delimiter):
用定界符生成一個(gè)字符串列表,并將該列表存入數(shù)組
substr(string,array,delimiter):
在字符串中用字符起止便宜量生成子串,并返回該子串
sub(regex,replacement_str,string):
將正則表達(dá)式匹配到的第一處內(nèi)容替換成replacement_str
gsub(regex,replacement_str,string):
和sub()類似。不過該函數(shù)會(huì)替換正則表達(dá)式匹配到的所有內(nèi)容
match(regex,string):
檢查正則表達(dá)式是否能夠匹配字符串。如果能夠匹配,返回非0值;否則,返回0.match()有兩個(gè)相關(guān)的特殊變量,分別是RSTART喝RLENGTH。變量RSTART包含正則表達(dá)式所匹配內(nèi)容的其實(shí)位置,而變量RLENGTH包含正則表達(dá)式所匹配內(nèi)容的長度。
舉例:
1.$ awk '{ sub(/test/, "mytest"); print }' testfile
在整個(gè)記錄中匹配,替換只發(fā)生在第一次匹配發(fā)生的時(shí)候
2.$ awk '{ sub(/test/, "mytest"); $1}; print }' testfile
在整個(gè)記錄的第一個(gè)域中進(jìn)行匹配,替換只發(fā)生在第一次匹配發(fā)生的時(shí)候
3.$ awk '{ print index("test", "mytest") }' testfile
實(shí)例返回test在mytest的位置,結(jié)果應(yīng)該是3
4.$ awk '{ print length( "test" ) }'
實(shí)例返回test字符串的長度。
awk補(bǔ)充二
這節(jié)可能要寫的比較粗了,時(shí)間太少。
一. 內(nèi)置函數(shù)
注意一種約定俗稱語法習(xí)慣: [a]代表a可選.
數(shù)字函數(shù)(Numeric Functions)
函數(shù)名 |
說明 |
atan2(y,x) | 返回y/x弧的反正切 |
cos(x) | 返回x的余弦 |
exp(x) | 返回x的指數(shù) |
int(x) | 返回最靠近的整數(shù),風(fēng)向標(biāo)指向0 |
log(x) | 返回x的自然對(duì)數(shù) |
rand() | 返回隨機(jī)數(shù) |
sin(x) | 返回x的正弦 |
sqrt(x) | 返回x的正平方根 |
srand([x]) | 生成隨機(jī)數(shù),可以設(shè)置起點(diǎn) |
字符串操作函數(shù)(String-Manipulation Functions)
注意:藍(lán)色部分為gawk特有,awk沒有此函數(shù)功能。
函數(shù)名 |
說明 |
asort(source [, dest [, how ] ]) | 返回?cái)?shù)組元素?cái)?shù)(內(nèi)容較多) |
asorti(source [, dest [, how ] ]) | 同asort,(有細(xì)微差別) |
gensub(regexp, replacement, how [, target]) | 搜索正則表達(dá)式RegExp匹配的regexp |
gsub(regexp, replacement [, target]) | 將正則表達(dá)式匹配的第一處內(nèi)容替換成replacement_str |
index(in, find) | 返回find在字符串in中出現(xiàn)的位置 |
length([string]) | string 中的字符數(shù) |
match(string, regexp [, array]) | 檢查正則表達(dá)式能否匹配字符串 |
patsplit(string, array [, fieldpat [, seps ] ]) |
劃分件到由fieldpat定義的字符串,并存儲(chǔ)在array里,分隔字符串存在在seps數(shù)組 |
split(string, array [, fieldsep [, seps ] ]) | 用定界符生成一個(gè)字符串列表,并將該列表存入數(shù)組 |
sprintf(format, expression1, ...) | 打印 |
strtonum(str) | 字符轉(zhuǎn)轉(zhuǎn)換成數(shù)字 |
sub(regexp, replacement [, target]) | 將正則表達(dá)式匹配到的第一處內(nèi)容替換成replacement |
substr(string, start [, length]) | 分割字符串,根據(jù)其實(shí)位置和長度 |
tolower(string) | 轉(zhuǎn)換成小寫 |
toupper(string) | 轉(zhuǎn)換成大寫 |
輸入輸出函數(shù)(Input/Output Functions)
函數(shù) |
說明 |
close(filename [, how]) | 關(guān)閉文件輸入輸出流 |
fflush([filename]) | 刷新與文件名相關(guān)的任何緩沖輸出 |
system(command) | 執(zhí)行操作系統(tǒng)命令,返回值給awk程序 |
時(shí)間函數(shù)(Time Functions)
函數(shù) |
說明 |
mktime(datespec) | datespec為時(shí)間戳格式,與systime()格式一樣 |
strftime([format [, timestamp [, utc-flag]]]) | 格式化timestamp的內(nèi)容,返回日期格式 |
systime() | 返回系統(tǒng)時(shí)間,精確到秒 |
位操作函數(shù)(Bit-Manipulation Functions)
函數(shù) |
說明 |
and(v1, v2) | v1,v2的與操作結(jié)果 |
compl(val) | val的反碼 |
lshift(val, count) | 返回val左移count位的值 |
or(v1, v2) | v1,v2的或操作 |
rshift(val, count) | 返回val右移count位的值 |
xor(v1, v2) | 返回v1,v2的異或的值 |
獲取類型信息(Getting Type Information)
函數(shù) |
說明 |
isarray(x) | 如果x是數(shù)組,返回true.否則false |
字符串轉(zhuǎn)換函數(shù)(String-Translation Functions)
函數(shù) |
說明 |
bindtextdomain(directory [, domain]) | 設(shè)置awk要搜尋信息的目錄和域 |
dcgettext(string [, domain [, category]]) | 返回的字符串string 翻譯文本域domain 的語言環(huán)境類別category |
dcngettext(string1, string2, number [, domain [, category]]) |
返回string1和string2的翻譯數(shù)量的復(fù)數(shù)形式,string1,string2在語言環(huán)境類別的文本域里 |
內(nèi)置函數(shù)還有些高級(jí)特性,等許多實(shí)例,以后有機(jī)會(huì)補(bǔ)充。
二. 自定義函數(shù)
格式入下:
如:
awk這個(gè)命令還有很多功能,打算就只寫這么多了。以后可能更多在一些例子里,與其他命令結(jié)合時(shí)會(huì)提到。
標(biāo)簽:鎮(zhèn)江 優(yōu)質(zhì)小號(hào) 丹東 百色 自貢 滁州 武漢 六盤水
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《一天一個(gè)shell命令 linux文本內(nèi)容操作系列-awk命令詳解》,本文關(guān)鍵詞 一天,一個(gè),shell,命令,linux,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。