精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

awk 中文man頁面

系統(tǒng)
awk 命令利用一組用戶提供的指令來將一組文件和用戶提供的擴(kuò)展正則表達(dá)式比較,一次一行。然后在任何與擴(kuò)展正則表達(dá)式匹配的行上執(zhí)行操作。

用途

在文件中查找與模式匹配的行,然后在它們上面執(zhí)行特定的操作。

語法

awk [ -F Ere ] [ -v Assignment ] ... { -f ProgramFile | 'Program' } [ [ File ... | Assignment ... ] ] ...

描述

awk 命令利用一組用戶提供的指令來將一組文件和用戶提供的擴(kuò)展正則表達(dá)式比較,一次一行。然后在任何與擴(kuò)展正則表達(dá)式匹配的行上執(zhí)行操作。awk 處理的***記錄大小為 10KB。

awk 命令的模式搜索比 grep 命令的搜索更常用,且它允許用戶在輸入文本行上執(zhí)行多個(gè)操作。awk 命令編程語言不需要編譯,并允許用戶使用變量、數(shù)字函數(shù)、字符串函數(shù)和邏輯運(yùn)算符。

awk 命令受到 LANG、LC_ALL、LC_COLLATE、LC_CTYPE、LC_MESSAGES、LC_NUMERIC、NLSPATH 和 PATH 環(huán)境變量的影響。

本章中包括以下主題:

  awk 命令的輸入 

  awk 命令的輸出 

  通過記錄和字段的文件處理 

  awk 命令編程語言 

    模式 

    操作 

    變量 

    特殊變量

  標(biāo)志 

  示例

awk 命令的輸入

awk 命令采取兩種類型的輸入:輸入文本文件和程序指令。

輸入文本文件

搜索和操作在輸入文本文件上執(zhí)行。文件如下指定:

  在命令行指定 File 變量。 

  修改特殊變量 ARGV 和 ARGC。 

  在缺省 File 變量的情況下提供標(biāo)準(zhǔn)輸入。

如果用 File 變量指定多個(gè)文件,則文件以指定的順序處理。

程序指令

用戶提供的指令控制 awk 命令的操作。這些指令來自命令行的‘Program’變量或來自用 -f 標(biāo)志和 ProgramFile 

變量一起指定的文件。如果指定多個(gè)程序文件,這些文件以指定的順序串聯(lián),且使用指令的生成的順序。

awk 命令的輸出

awk 命令從輸入文本文件中的數(shù)據(jù)產(chǎn)生三種類型的輸出:

  選定的數(shù)據(jù)可以打印至標(biāo)準(zhǔn)輸出,此輸出完全同于輸入文件。 

  輸入文件的選定部分可以更改。 

  選定數(shù)據(jù)可以更改并可打印至標(biāo)準(zhǔn)輸出,此輸出可以同于或不同于輸入文件的內(nèi)容。

可以在同一個(gè)文件上執(zhí)行所有三種類型的輸出。awk 命令是別的編程語言允許用戶重定向輸出。

通過記錄和字段的文件處理

文件以下列方式處理:

  awk 命令掃描它的指令,并執(zhí)行任何指定為在讀取輸入前發(fā)生的操作。 

  awk 編程語言中的 BEGIN 語句允許用于指定在讀取***個(gè)記錄前要執(zhí)行的一組指令。這對(duì)于初始化特殊變量特別有用。

  從輸入文件讀取一個(gè)記錄。 

  記錄是由記錄分隔符隔開的一組數(shù)據(jù)。記錄分隔符的缺省值是換行字符,它使文件中的每一行成為一個(gè)單獨(dú)的記錄。記錄分隔符可以通過設(shè)置 RS 特殊變量來更改。

  記錄是相對(duì)于 awk 命令的指令指定的每種模式比較。 

  命令指令可以指定應(yīng)比較記錄內(nèi)的特定字段。缺省情況下,字段由空白區(qū)(空格或跳格)隔開。每個(gè)字段由一個(gè)字段變量表示。記錄中的***個(gè)字段指定為 $1 

  變量,第二個(gè)字段指定為 $2 變量,以此類推。整個(gè)記錄指定為 $0 變量。字段分隔符可以通過在命令行使用 -F 標(biāo)志或通過設(shè)置 FS 特殊變量來更改。FS 

  特殊變量可以設(shè)置為下列值:空格、單個(gè)字符或擴(kuò)展正則表達(dá)式。

  如果一個(gè)記錄與一個(gè)模式相匹配,則任何與該模式相關(guān)的操作都在該記錄上執(zhí)行。 

  在記錄和每個(gè)模式比較且執(zhí)行了所有指定操作以后,從輸入讀取下一個(gè)記錄;在從輸入文件讀取所有的記錄之前,該進(jìn)程重復(fù)。 

  如果已經(jīng)指定了多個(gè)輸入文件,則下一個(gè)文件打開,且在讀取所有的輸入文件之前,該進(jìn)程重復(fù)。 

  在讀取了***一個(gè)文件中的***一個(gè)記錄后,awk 命令執(zhí)行任何指定為在輸入處理后發(fā)生的指令。 

  awk 編程語言中的 END 語句允許用戶指定在讀取***一個(gè)記錄后要執(zhí)行的操作。這對(duì)于發(fā)送有關(guān) awk 命令完成了什么工作的消息特別有用。

awk 命令編程語言

awk 命令編程語言由以下格式的語句構(gòu)成:

Pattern { Action }

如果一個(gè)記錄與指定模式相匹配,或包含與該模式匹配的字段,則執(zhí)行相關(guān)的操作??梢灾付]有操作的模式,這種情況下,包含該模式的整行寫至標(biāo)準(zhǔn)輸出。為每個(gè)輸入記錄執(zhí)行指定的沒有模式的操作。

模式

在 awk 命令語言語法中使用四種類型的模式:

  正則表達(dá)式 

  關(guān)系表達(dá)式 

  模式的組合 

  BEGIN 和 END 模式

正則表達(dá)式

awk 命令使用的擴(kuò)展正則表達(dá)式類似于 grep 或 egrep 命令使用的表達(dá)式。擴(kuò)展正則表達(dá)式的最簡(jiǎn)單的形式就是包括在斜杠中的一串字符。例如,假定一個(gè)名為 

testfile 的文件具有以下內(nèi)容:

smawley, andy

smiley, allen

smith, alan

smithern, harry

smithhern, anne

smitters, alexis

輸入以下一行命令:

awk '/smi/' testfile

將把包含 smi 字符串的具體值的所有記錄打印至標(biāo)準(zhǔn)輸出。在這個(gè)示例中,awk 命令的程序 '/smi/' 是一個(gè)沒有操作的模式。輸出是:

smiley, allen

smith, alan

smithern, harry

smithhern, anne

smitters, alexis

以下特殊字符用于形成擴(kuò)展正則表達(dá)式:

      字符功能

      +指定如果一個(gè)或多個(gè)字符或擴(kuò)展正則表達(dá)式的具體值(在 +(加號(hào))前)在這個(gè)字符串中,則字符串匹配。命令行: 

awk '/smith+ern/' testfile

      將包含字符 smit,后跟一個(gè)或多個(gè) h 字符,并以字符 ern 結(jié)束的字符串的任何記錄打印至標(biāo)準(zhǔn)輸出。此示例中的輸出是:

smithern, harry

smithhern, anne

 

      ?指定如果零個(gè)或一個(gè)字符或擴(kuò)展正則表達(dá)式的具體值(在 ?(問號(hào))之前)在字符串中,則字符串匹配。命令行: 

awk '/smith?/' testfile

      將包含字符 smit,后跟零個(gè)或一個(gè) h 字符的實(shí)例的所有記錄打印至標(biāo)準(zhǔn)輸出。此示例中的輸出是:

smith, alan

smithern, harry

smithhern, anne

smitters, alexis

 

      |指定如果以 |(垂直線)隔開的字符串的任何一個(gè)在字符串中,則字符串匹配。命令行: 

awk '/allen 

alan /' testfile

      將包含字符串 allen 或 alan 的所有記錄打印至標(biāo)準(zhǔn)輸出。此示例中的輸出是:

smiley, allen

smith, alan

 

      ( )在正則表達(dá)式中將字符串組合在一起。命令行: 

awk '/a(ll)?(nn)?e/' testfile

      將具有字符串 ae 或 alle 或 anne 或 allnne 的所有記錄打印至標(biāo)準(zhǔn)輸出。此示例中的輸出是:

smiley, allen

smithhern, anne

 

      {m}指定如果正好有 m 個(gè)模式的具體值位于字符串中,則字符串匹配。命令行: 

awk '/l{2}/' testfile

      打印至標(biāo)準(zhǔn)輸出

smiley, allen

 

      {m,}指定如果至少 m 個(gè)模式的具體值在字符串中,則字符串匹配。命令行: 

awk '/t{2,}/' testfile

      打印至標(biāo)準(zhǔn)輸出:

smitters, alexis

 

      {m, n}指定如果 m 和 n 之間(包含的 m 和 n)個(gè)模式的具體值在字符串中(其中m <= n),則字符串匹配。命令行: 

awk '/er{1, 2}/' testfile

      打印至標(biāo)準(zhǔn)輸出:

smithern, harry

smithern, anne

smitters, alexis

 

      [String]指定正則表達(dá)式與方括號(hào)內(nèi) String 變量指定的任何字符匹配。命令行: 

awk '/sm[a-h]/' testfile

      將具有 sm 后跟以字母順序從 a 到 h 排列的任何字符的所有記錄打印至標(biāo)準(zhǔn)輸出。此示例的輸出是:

smawley, andy

 

      [^ String]在 [ ](方括號(hào))和在指定字符串開頭的 ^ (插入記號(hào)) 指明正則表達(dá)式與方括號(hào)內(nèi)的任何字符不匹配。這樣,命令行: 

awk '/sm[^a-h]/' testfile

      打印至標(biāo)準(zhǔn)輸出:

smiley, allen

smith, alan

smithern, harry

smithhern, anne

smitters, alexis

 

      ~,!~表示指定變量與正則表達(dá)式匹配(代字號(hào))或不匹配(代字號(hào)、感嘆號(hào))的條件語句。命令行: 

awk '$1 ~ /n/' testfile

      將***個(gè)字段包含字符 n 的所有記錄打印至標(biāo)準(zhǔn)輸出:

smithern, harry

smithhern, anne

 

      ^指定字段或記錄的開頭。命令行: 

awk '$2 ~ /^h/' testfile

      將把字符 h 作為第二個(gè)字段的***個(gè)字符的所有記錄打印至標(biāo)準(zhǔn)輸出。此示例中的輸出是:

smithern, harry

 

      $指定字段或記錄的末尾。命令行: 

awk '$2 ~ /y$/' testfile

      將把字符 y 作為第二個(gè)字段的***一個(gè)字符的所有記錄打印至標(biāo)準(zhǔn)輸出。此示例中的輸出是:

smawley, andy

smithern, harry

 

      .(句號(hào))表示除了在空白末尾的終端換行字符以外的任何一個(gè)字符。命令行: 

awk '/a..e/' testfile

      將具有以兩個(gè)字符隔開的字符 a 和 e 的所有記錄打印至標(biāo)準(zhǔn)輸出。此示例中的輸出是:

smawley, andy

smiley, allen

smithhern, anne

 

      *(星號(hào))表示零個(gè)或更多的任意字符。命令行: 

awk '/a.*e/' testfile

      將具有以零個(gè)或更多字符隔開的字符 a 和 e 打印至標(biāo)準(zhǔn)輸出。此示例中的輸出是:

smawley, andy

smiley, allen

smithhern, anne

smitters, alexis

 

      \ (反斜杠)轉(zhuǎn)義字符。當(dāng)位于在擴(kuò)展正則表達(dá)式中具有特殊含義的任何字符之前時(shí),轉(zhuǎn)義字符除去該字符的任何特殊含義。例如,命令行: 

/a\/\//

      將與模式 a // 

      匹配,因?yàn)榉葱备芊穸ㄐ备茏鳛檎齽t表達(dá)式定界符的通常含義。要將反斜杠本身指定為字符,則使用雙反斜杠。有關(guān)反斜杠及其使用的更多信息,請(qǐng)參閱以下關(guān)于轉(zhuǎn)義序列的內(nèi)容。

 

識(shí)別的轉(zhuǎn)義序列

awk 命令識(shí)別大多數(shù)用于 C 語言約定中的轉(zhuǎn)義序列,以及 awk 命令本身用作特殊字符的幾個(gè)轉(zhuǎn)義序列。轉(zhuǎn)義序列是:

      轉(zhuǎn)義序列表示的字符

      \"\"(雙引號(hào))

      \//(斜杠)字符

      \ddd其編碼由 1、2 或 3 位八進(jìn)制整數(shù)表示的字符,其中 d 表示一個(gè)八進(jìn)制數(shù)位

      \\\ (反斜杠) 字符

      \a警告字符

      \b退格字符

      \f換頁字符

      \n換行字符(請(qǐng)參閱以下的注)

      \r回車字符

      \t跳格字符

      \v垂直跳格

 

  注:除了在 gsub、match、split 和 sub 

  內(nèi)置函數(shù)中,擴(kuò)展正則表達(dá)式的匹配都基于輸入記錄。記錄分隔符字符(缺省情況下為換行字符)不能嵌套在表達(dá)式中,且沒與記錄分隔符字符匹配的表達(dá)式。 如果記錄分隔符不是換行字符,則可與換行字符匹配。在指定的四個(gè)內(nèi)置函數(shù)中,匹配基于文本字符串,且任何字符(包含記錄分隔符)可以嵌套在模式中,這樣模 式與適當(dāng)?shù)淖址嗥ヅ?。然而,?nbsp;

  awk 命令進(jìn)行的所有正則表達(dá)式匹配中,在模式使用一個(gè)或多個(gè) NULL(空)字符將生成未定以的結(jié)果。

關(guān)系表達(dá)式

關(guān)系運(yùn)算符 <(小于)、>(大于)、<=(小于或等于)、>=(大于或等于)、= =(等于)和 !=(不等于)可用來形成模式。例如,模式:

$1 < $4

將與***個(gè)字段小于第四個(gè)字段的記錄匹配。關(guān)系運(yùn)算符還和字符串值一起使用。例如:

$1 =! "q"

將與***個(gè)字段不是 q 的所有記錄匹配。字符串值還可以根據(jù)校對(duì)值匹配。例如:

$1 >= "d"

將與***個(gè)字段以字符 a、b、c 或 d 開頭的所有記錄匹配。如果未給出其它信息,則字段變量作為字符串值比較。

模式的組合

可以使用三種選項(xiàng)組合模式:

  范圍由兩種以 ,(逗號(hào))隔開的模式指定。操作在每個(gè)以匹配***個(gè)模式的記錄開始的每個(gè)記錄上執(zhí)行,并通過匹配第二個(gè)模式的記錄(包含此記錄)繼續(xù)。例如: 

/begin/,/end/

  與包含字符串 begin 的記錄以及該記錄和包含字符串 end 之間的所有記錄(包含包括字符串 end 的記錄)匹配。

  括號(hào) ( ) 將模式組合在一起。 

  布爾運(yùn)算符 ||(或)&&(和)以及 !(不)將模式組合成如果它們求值為真則匹配,否則不匹配的表達(dá)式。例如,模式:

$1 == "al" && $2 == "123"

  與***個(gè)字段是 al 且第二個(gè)字段是 123 的記錄匹配。

BEGIN 和 END 模式

用 BEGIN 模式指定的操作在讀取任何輸入之前執(zhí)行。用 END 模式指定的操作在讀取了所有輸入后執(zhí)行。允許多個(gè) BEGIN 和 END 

模式,并以指定的順序處理它們。在程序語句中 END 模式可以在 BEGIN 模式之前。如果程序僅由 BEGIN 語句構(gòu)成,則執(zhí)行操作且不讀取輸入。如果程序僅由 

END 語句構(gòu)成,則在任何操作執(zhí)行前讀取所有輸入。

操作

有多種類型的操作語句:

  操作語句 

  內(nèi)置函數(shù) 

  用戶定義的函數(shù) 

  條件語句 

  輸出操作

操作語句

操作語句括在 { } (花括號(hào)) 中。如果語句指定為沒有模式,則它們?cè)诿總€(gè)記錄上執(zhí)行。在括號(hào)里可以指定多個(gè)操作,但操作間必須以換行字符或 

;(分號(hào)),且語句以它們出現(xiàn)的順序處理。操作語句包含:

      算術(shù)語句

      算術(shù)運(yùn)算符 +(加號(hào)), - (減號(hào)), / (除號(hào)), ^ (冪), * (乘號(hào)), % (系數(shù))用于格式: 

表達(dá)式 運(yùn)算符 表達(dá)式

      這樣語句為:

$2 = $1 ^ 3

      將***個(gè)升為三次方的字段的值指定給第二個(gè)字段。

      一元語句

      一元 -(減號(hào))和一元 +(加號(hào))如在 C 編程語言中操作: 

+Expression 或 -Expression

 

      增量和減量語句

      增量前語句和減量前語句如在 C 編程語言中操作: 

++Variable 或 --Variable

      增量后語句和減量后語句如在 C 編程語言中操作:

Variable++ 或 Variable--

 

      賦值語句

      賦值運(yùn)算符 +=(加)、-=(減)、/=(除)和 *=(乘)如在 C 編程語言中操作,格式為: 

Variable += Expression

Variable -= Expression

Variable /= Expression

Variable *= Expression

      例如,語句:

$1 *= $2

      將字段變量 $1 乘以字段變量 $2,然后將新值指定給 $1。

      賦值運(yùn)算符 ^=(冪)和 %=(系數(shù))具有以下格式:

Variable1^=Expression1

      和

Variable2%=Expression2

      并且它們等同于 C 編程語言語句:

Variable1=pow(Variable1, Expression1)

      和

Variable2=fmod(Variable2, Expression2)

      其中 pow 是 pow 子例程而 fmod 是 fmod 子例程。

      字符串串聯(lián)語句

      字符串值可以通過緊挨著陳述來串聯(lián)。例如: 

$3 = $1 $2

      將字段變量 $1 和 $2 中的字符串的串聯(lián)指定給字段變量 $3。

 

內(nèi)置函數(shù)

awk 命令語言使用算術(shù)函數(shù)、字符串函數(shù)和一般函數(shù)。如果打算編寫一個(gè)文件,且稍后在同一個(gè)程序里讀取它,則 close 子例程語句是必需的。

算術(shù)函數(shù)

以下算術(shù)函數(shù)執(zhí)行與 C 語言中名稱相同的子例程相同的操作:

      atan2( y, x )返回 y/x 的反正切。

      cos( x )返回 x 的余弦;x 是弧度。

      sin( x )返回 x 的正弦;x 是弧度。

      exp( x )返回 x 冪函數(shù)。

      log( x )返回 x 的自然對(duì)數(shù)。

      sqrt( x )返回 x 平方根。

      int( x )返回 x 的截?cái)嘀琳麛?shù)的值。

      rand( )返回任意數(shù)字 n,其中 0 <= n < 1。

      srand( [Expr] )將 rand 函數(shù)的種子值設(shè)置為 Expr 參數(shù)的值,或如果省略 Expr 參數(shù)則使用某天的時(shí)間。返回先前的種子值。

 

字符串函數(shù)

字符串函數(shù)是:

      gsub( Ere, Repl, [ In ] )除了正則表達(dá)式所有具體值被替代這點(diǎn),它和 sub 函數(shù)完全一樣地執(zhí)行,。

      sub( Ere, Repl, [ In ] )用 Repl 參數(shù)指定的字符串替換 In 參數(shù)指定的字符串中的由 Ere 

      參數(shù)指定的擴(kuò)展正則表達(dá)式的***個(gè)具體值。sub 函數(shù)返回替換的數(shù)量。出現(xiàn)在 Repl 參數(shù)指定的字符串中的 &(和符號(hào))由 In 參數(shù)指定的與 

      Ere 參數(shù)的指定的擴(kuò)展正則表達(dá)式匹配的字符串替換。如果未指定 In 參數(shù),缺省值是整個(gè)記錄($0 記錄變量)。

      index( String1, String2 )在由 String1 參數(shù)指定的字符串(其中有出現(xiàn) String2 指定的參數(shù))中,返回位置,從 

      1 開始編號(hào)。如果 String2 參數(shù)不在 String1 參數(shù)中出現(xiàn),則返回 0(零)。

      length [(String)]返回 String 參數(shù)指定的字符串的長(zhǎng)度(字符形式)。如果未給出 String 參數(shù),則返回整個(gè)記錄的長(zhǎng)度($0 

      記錄變量)。

      blength [(String)]返回 String 參數(shù)指定的字符串的長(zhǎng)度(以字節(jié)為單位)。如果未給出 String 

      參數(shù),則返回整個(gè)記錄的長(zhǎng)度($0 記錄變量)。

      substr( String, M, [ N ] )返回具有 N 參數(shù)指定的字符數(shù)量子串。子串從 String 參數(shù)指定的字符串取得,其字符以 M 

      參數(shù)指定的位置開始。M 參數(shù)指定為將 String 參數(shù)中的***個(gè)字符作為編號(hào) 1。如果未指定 N,則子串的長(zhǎng)度將是 M 參數(shù)指定的位置到 

      String 參數(shù)的末尾 的長(zhǎng)度。

      match( String, Ere )在 String 參數(shù)指定的字符串(Ere 參數(shù)指定的擴(kuò)展正則表達(dá)式出現(xiàn)在其中)中返回位置(字符形式),從 

      1 開始編號(hào),或如果 Ere 參數(shù)不出現(xiàn),則返回 0(零)。RSTART 特殊變量設(shè)置為返回值。RLENGTH 

      特殊變量設(shè)置為匹配的字符串的長(zhǎng)度,或如果未找到任何匹配,則設(shè)置為 -1(負(fù)一)。

      split( String, A, [Ere] )將 String 參數(shù)指定的參數(shù)分割為數(shù)組元素 A[1], A[2], . . ., 

      A[n],并返回 n 變量的值。此分割可以通過 Ere 參數(shù)指定的擴(kuò)展正則表達(dá)式進(jìn)行,或用當(dāng)前字段分隔符 FS 特殊變量)來進(jìn)行(如果沒有給出 

      Ere 參數(shù))。除非上下文指明特定的元素還應(yīng)具有一個(gè)數(shù)字值,否則 A 數(shù)組中的元素用字符串值來創(chuàng)建。

      tolower( String )返回 String 參數(shù)指定的字符串,字符串中每個(gè)大寫字符將更改為小寫。大寫和小寫的映射由當(dāng)前語言環(huán)境的 

      LC_CTYPE 范疇定義。

      toupper( String )返回 String 參數(shù)指定的字符串,字符串中每個(gè)小寫字符將更改為大寫。大寫和小寫的映射由當(dāng)前語言環(huán)境的 

      LC_CTYPE 范疇定義。

      sprintf(Format, Expr, Expr, . . . )根據(jù) Format 參數(shù)指定的 printf 子例程格式字符串來格式化 

      Expr 參數(shù)指定的表達(dá)式并返回***生成的字符串。

 

一般函數(shù)

一般函數(shù)是:

      close( Expression )用同一個(gè)帶字符串值的 Expression 參數(shù)來關(guān)閉由 print 或 printf 語句打開的或調(diào)用 

      getline 參數(shù)打開的文件或管道。如果文件或管道成功關(guān)閉,則返回 0;其它情況下返回非零值。如果打算寫一個(gè)文件,并稍后在同一個(gè)程序中讀取文件,則 

      close 語句是必需的。

      system(Command )執(zhí)行 Command 參數(shù)指定的命令,并返回出口狀態(tài)。等同于 system 子例程。

      Expression | getline [ Variable ]從來自 Expression 

      參數(shù)指定的命令的輸出中通過管道傳送的流中讀取一個(gè)輸入記錄,并將該記錄的值指定給 Variable 參數(shù)指定的變量。如果當(dāng)前未打開江 

      Expression 參數(shù)的值作為其命令名稱的流,則創(chuàng)建流。創(chuàng)建的流等同于調(diào)用 popen 子例程,此時(shí) Command 參數(shù)取 

      Expression 參數(shù)的值且 Mode 參數(shù)設(shè)置為一個(gè)是 r 的值。只要流保留打開且 Expression 參數(shù)求得同一個(gè)字符串,則對(duì) 

      getline 函數(shù)的每次后續(xù)調(diào)用讀取另一個(gè)記錄。如果未指定 Variable 參數(shù),則 $0 記錄變量和 NF 特殊變量設(shè)置為從流讀取的記錄。

      getline [ Variable ] < Expression從 Expression 參數(shù)指定的文件讀取輸入的下一個(gè)記錄,并將 

      Variable 參數(shù)指定的變量設(shè)置為該記錄的值。只要流保留打開且 Expression 參數(shù)對(duì)同一個(gè)字符串求值,則對(duì) getline 

      函數(shù)的每次后續(xù)調(diào)用讀取另一個(gè)記錄。如果未指定 Variable 參數(shù),則 $0 記錄變量和 NF 特殊變量設(shè)置為從流讀取的記錄。

      getline [ Variable ]將 Variable 參數(shù)指定的變量設(shè)置為從當(dāng)前輸入文件讀取的下一個(gè)輸入記錄。如果未指定 Variable 

      參數(shù),則 $0 記錄變量設(shè)置為該記錄的值,還將設(shè)置 NF、NR 和 FNR 特殊變量。

 

  注:所有 getline 函數(shù)的格式對(duì)于成功輸入返回 1,對(duì)于文件結(jié)束返回零,對(duì)于錯(cuò)誤返回 -1。

用戶定義的函數(shù)

用戶定義的函數(shù)以下列格式說明:

function Name (Parameter, Parameter,...)  { Statements }

函數(shù)可以指向 awk 命令程序中的任何位置,且它的使用可以優(yōu)先于它的定義。此函數(shù)的作用域是全局的。

函數(shù)參數(shù)可以是標(biāo)量或數(shù)組。參數(shù)名稱對(duì)函數(shù)而言是本地的;所有其它變量名稱都是全局的。同一個(gè)名稱不應(yīng)用作不同的實(shí)體;例如,一個(gè)參數(shù)不能即用作函數(shù)名稱又用作特殊變量。具有全局作用域的變量不應(yīng)共享一個(gè)函數(shù)的名稱。同個(gè)作用域中的標(biāo)量和數(shù)組不應(yīng)具有同一個(gè)名稱。

函數(shù)定義中的參數(shù)數(shù)量不必和調(diào)用函數(shù)時(shí)使用的參數(shù)數(shù)量匹配。多余的形式參數(shù)可用作本地變量。額外的標(biāo)量初始化后具有等同于空字符串和數(shù)字值為 

0(零)的字符串值;額外的數(shù)組參數(shù)初始化為空數(shù)組。

當(dāng)調(diào)用函數(shù)時(shí),函數(shù)名稱和左括號(hào)之間沒有空格。函數(shù)調(diào)用可以是嵌套的或循環(huán)的。從任何嵌套的或循環(huán)函數(shù)函數(shù)調(diào)用返回時(shí),所有調(diào)用函數(shù)的參數(shù)的值應(yīng)保持不變,除了引用傳送的數(shù)組參數(shù)。return 

語句可用于返回一個(gè)值。

在函數(shù)定義內(nèi),在左 { (花括號(hào)) 之前和右 } (花括號(hào)) 之后的換行字符是可選的。

函數(shù)定義的一個(gè)示例是:

function average ( g,n) 

  {

        for (i in g)

           sum=sum+g[i]

        avg=sum/n

        return avg

  } 

數(shù)組 g 和變量 n 以及數(shù)組中的元素個(gè)數(shù)傳遞給函數(shù) average。然后函數(shù)獲得一個(gè)平均值并返回它。

條件語句

awk 命令編程語言中的大部分條件語句和 C 編程語言中的條件語句具有相同的語法和功能。所有條件語句允許使用{ } (花括號(hào)) 

將語句組合在一起。可以在條件語句的表達(dá)式部分和語句部分之間使用可選的換行字符,且換行字符或 ;(分號(hào))用于隔離 { } (花括號(hào)) 中的多個(gè)語句。C 

語言中的六種條件語句是:

      if需要以下語法: 

      if ( Expression ) { Statement } [ else Action ]

      while需要以下語法: 

      while ( Expression ) { Statement }

      for需要以下語法: 

      for ( Expression ; Expression ; Expression ) { Statement }

      break當(dāng) break 語句用于 while 或 for 語句時(shí),導(dǎo)致退出程序循環(huán)。

      continue當(dāng) continue 語句用于 while 或 for 語句時(shí),使程序循環(huán)移動(dòng)到下一個(gè)迭代。

 

awk 命令編程語言中的五種不遵循 C 語言規(guī)則的條件語句是:

      for...in需要以下語法: 

      for ( Variable in Array ) { Statement }

      for...in 語句將 Variable 參數(shù)設(shè)置為 Array 變量的每個(gè)索引值,一次一個(gè)索引且沒有特定的順序,并用每個(gè)迭代來執(zhí)行 

      Statement 參數(shù)指定的操作。請(qǐng)參閱 delete 語句以獲得 for...in 語句的示例。

      if...in需要以下語法: 

      if ( Variable in Array ) { Statement }

      if...in 語句搜索是否存在的 Array 元素。如果找到 Array 元素,就執(zhí)行該語句。

      delete需要以下語法: 

      delete Array [ Expression ]

      delete 語句刪除 Array 參數(shù)指定的數(shù)組元素和 Expression 參數(shù)指定的索引。例如,語句:

for (i in g)

   delete g[i];

      將刪除 g[] 數(shù)組的每個(gè)元素。

      exit需要以下語法: 

      exit [Expression]

      exit 語句首先調(diào)用所有 END 操作(以它們發(fā)生的順序),然后以 Expression 參數(shù)指定的出口狀態(tài)終止 awk 命令。如果 exit 

      語句在 END 操作中出現(xiàn),則不調(diào)用后續(xù) END 操作。

      #需要以下語法: 

      # Comment

      # 語句放置注釋。注釋應(yīng)始終以換行字符結(jié)束,但可以在一行上的任何地方開始。

      next停止對(duì)當(dāng)前輸入記錄的處理,從下一個(gè)輸入記錄繼續(xù)。

 

輸出語句

awk 命令編程語言的兩種輸出語句是:

      print需要以下語法: 

      print [ ExpressionList ] [ Redirection ] [ Expression ]

      print 語句將 ExpressionList 參數(shù)指定的每個(gè)表達(dá)式的值寫至標(biāo)準(zhǔn)輸出。每個(gè)表達(dá)式由 OFS 特殊變量的當(dāng)前值隔開,且每個(gè)記錄由 

      ORS 特殊變量的當(dāng)前值終止。

      可以使用 Redirection 參數(shù)重定向輸出,此參數(shù)可指定用 >(大于號(hào))、>>(雙大于號(hào))和 

      |(管道)進(jìn)行的三種輸出重定向。Redirection 參數(shù)如果重定向輸出,而 Expression 參數(shù)是文件的路徑名稱(當(dāng) 

      Redirection 參數(shù)是 > 或 >> 時(shí))或命令的名稱(當(dāng) Redirection 參數(shù)是 | 時(shí))。

      printf需要以下語法: 

      printf Format [ , ExpressionList ] [ Redirection ] [ Expression ]

      printf 語句將 ExpressionList 參數(shù)指定的表達(dá)式以 Format 參數(shù)指定的格式寫至標(biāo)準(zhǔn)輸出。除了 c 

      轉(zhuǎn)換規(guī)范(%c)不同外,printf 語句和 printf 命令起完全相同的作用。Redirection 和 Expression 參數(shù)與在 

      print 語句中起相同的作用。

      對(duì)于 c 

      轉(zhuǎn)換規(guī)范:如果自變量具有一個(gè)數(shù)字值,則編碼是該值的字符將輸出。如果值是零或不是字符集中的任何字符的編碼,則行為未定義。如果自變量不具有數(shù)字值,則輸出字符串值的***個(gè)字符;如果字符串不包含任何字符,則行為未定義。

 

  注:如果 Expression 參數(shù)為 Redirection 參數(shù)指定一個(gè)路徑名稱,則 Expression 參數(shù)將括在雙引號(hào)中以確保將它當(dāng)作字符串對(duì)待。

變量

變量可以是標(biāo)量、字段變量、數(shù)組或特殊變量。變量名稱不能以數(shù)字開始。

變量可僅用于引用。除了函數(shù)參數(shù)以外,它們沒有明確說明。未初始化的標(biāo)量變量和數(shù)組元素具有一個(gè)為 0(零)的數(shù)字值和一個(gè)為空字符串(" ")的字符串值。

根據(jù)上下文,變量呈現(xiàn)出數(shù)字或字符串值。每個(gè)變量可以具有數(shù)字值和/或字符串值。例如:

x = "4" + "8"

將值 12 指定給變量 x。對(duì)于字符串常量,表達(dá)式應(yīng)括在 " "(雙引號(hào))中。

數(shù)字和字符串間沒有顯式轉(zhuǎn)換。要促使將表達(dá)式當(dāng)作一個(gè)數(shù)字,向它添加 0(零)。要促使將表達(dá)式當(dāng)作一個(gè)字符串,則添加一個(gè)空字符串(" ")。

字段變量

字段變量由 $(美元符號(hào))后跟一個(gè)數(shù)字或數(shù)字表達(dá)式來表示。記錄中的***個(gè)字段指定為 $1 變量,第二個(gè)字段指定為 $2,以次類推。$0 

字段變量指定給整個(gè)記錄。新字段可以通過指定一個(gè)值給它們來創(chuàng)建。將一個(gè)值指定給不存在的字段(即任何大于 $NF 

字段變量的當(dāng)前值的字段)將促使創(chuàng)建任何干擾字段(指定為空字符串),增加 NF 特殊變量的值,并促使重新計(jì)算 $0 記錄變量。新字段由當(dāng)前字段分隔符(FS 

特殊變量的值)隔開??崭窈吞袷侨笔∽侄畏指舴R淖侄畏指舴?,請(qǐng)使用 -F 標(biāo)志或 在 awk 命令程序中為 FS 特殊變量指定另一個(gè)值。

數(shù)組

數(shù)組初始為空且它們大小可動(dòng)態(tài)更改。數(shù)組由一個(gè)變量和在 [ ](方括號(hào))中的下標(biāo)來表示。下標(biāo)或元素標(biāo)識(shí)符可以是幾個(gè)字符串,它們提供了一種相關(guān)數(shù)組能力。例如,程序:

/red/  { x["red"]++ }

/green/ { y["green"]++ }

增加 red 計(jì)數(shù)器和 green 計(jì)數(shù)器的計(jì)數(shù)。

數(shù)組可以用一個(gè)以上的下標(biāo)來建立索引,類似于一些編程語言中的多維數(shù)組。因?yàn)?awk 命令的編程數(shù)組實(shí)際上一維的,通過串聯(lián)各獨(dú)立表達(dá)式的字符串值(每個(gè)表達(dá)式由 

SUBSEP 環(huán)境變量的值隔開)來將以逗號(hào)隔開的下標(biāo)轉(zhuǎn)換為單個(gè)字符串。所以,以下兩個(gè)索引操作是等同的:

x[expr1, expr2,...exprn]

x[expr1SUBSEPexpr2SUBSEP...SUBSEPexprn]

當(dāng)使用 in 運(yùn)算符時(shí),一個(gè)多維 Index 值應(yīng)包含在圓括號(hào)之中。除了 in 運(yùn)算符,任何對(duì)不存在數(shù)組元素的引用將自動(dòng)創(chuàng)建該元素。

特殊變量

以下變量對(duì)于 awk 命令具有特殊含義:

      ARGCARGV 數(shù)組中的元素個(gè)數(shù)。此值可以更改。

      ARGV其每個(gè)成員包含 File 變量之一或 Assignment 變量之一的數(shù)組按序從命令行取出,并從 0(零)編號(hào)至 ARGC

      -1。當(dāng)每個(gè)輸入文件完成時(shí),ARGV 數(shù)組的下一個(gè)成員提供下一個(gè)輸入文件的名稱,除非: 

        下一個(gè)成員是 Assignment 語句,這種情況下對(duì)賦值求值。 

        下一個(gè)成員具有空值,這種情況下跳過該成員。程序可以通過設(shè)置 ARGV 數(shù)組的包含該輸入文件的成員設(shè)置為一個(gè)空值來跳過所選的輸入文件。 

        下一個(gè)成員是 ARGV [ARGC -1] 的當(dāng)前值,awk 命令將此成員解釋為輸入文件的末尾。

 

      CONVFMT將數(shù)字轉(zhuǎn)換為字符串的 printf 格式(除了使用 OFMT 特殊變量的輸出語句)。缺省值為“%.6g”。

      ENVIRON表示運(yùn)行 awk 命令的環(huán)境的數(shù)組。該數(shù)組的每個(gè)元素在以下格式中: 

      ENVIRON [ "Environment VariableName" ] = EnvironmentVariableValue

      當(dāng) awk 命令開始執(zhí)行時(shí)設(shè)置這些值,且到執(zhí)行結(jié)束前一直使用該變量,不考慮 ENVIRON 特殊變量的任何修改。

      FILENAME當(dāng)前輸入文件的路徑名稱。在執(zhí)行 BEGIN 操作的過程中,F(xiàn)ILENAME 的值未定義。在執(zhí)行 END 

      操作的過程中,該值是處理的***一個(gè)輸入文件的名稱。

      FNR當(dāng)前文件中的當(dāng)前輸入記錄的個(gè)數(shù)。

      FS輸入字段分隔符。缺省值是空格。如果輸入字段分隔符是空格,則任何數(shù)目的語言環(huán)境定義的空格可以分隔字段。FS 特殊變量可以有兩種附加的值: 

        如果 FS 設(shè)置為單個(gè)字符,則字段由該字符的每個(gè)單個(gè)具體值隔開。 

        如果 FS 位置為一個(gè)擴(kuò)展正則表達(dá)式,則字段由與擴(kuò)展正則表達(dá)式匹配的每個(gè)序列的具體值隔開。

 

      NF當(dāng)前記錄中的字段個(gè)數(shù),***數(shù) 99 個(gè)。在 BEGIN 操作中,除非先前發(fā)出不帶 Variable 參數(shù)的 getline 函數(shù),否則 NF 

      特殊變量未定義。在 END 操作中,除非在輸入 END 操作之前發(fā)出不帶 Variable 參數(shù)的后續(xù)的、重定向的 getline 函數(shù),否則 NF 

      特殊變量保留它為讀取的***一個(gè)記錄而具有的值。

      NR當(dāng)前輸入記錄的個(gè)數(shù)。在 BEGIN 操作中,NR 特殊變量的值是 0(零)。在 END 操作中,值是***處理的記錄的編號(hào)。

      OFMT在輸出語句中將數(shù)字轉(zhuǎn)換為字符串的 printf 格式。缺省值為“%.6g”。

      OFS輸出字段分隔符(缺省值是空格)。

      ORS輸出記錄分隔符(缺省值是換行字符)。

      RLENGTH由 match 函數(shù)來匹配的字符串的長(zhǎng)度。

      RS輸入記錄分隔符(缺省值是換行字符)。如果 RS 

      特殊變量為空,則記錄以一個(gè)或多個(gè)空行的序列隔開;***個(gè)空行或***一個(gè)空行在輸入的開始和結(jié)束都不會(huì)產(chǎn)生空記錄;換行字符始終是一個(gè)字段分隔符,不考慮 

      FS 特殊變量的值。

      RSTART由 match 函數(shù)來匹配的字符串的起始位置,從 1 開始編號(hào)。等同于 match 函數(shù)的返回值。

      SUBSEP隔開多個(gè)下標(biāo)。缺省值是 \031。

 

標(biāo)志

      -f ProgramFile從 ProgramFile 變量指定的文件獲取 awk 命令的指令。如果多次指定 -f 

      標(biāo)志,則文件的串聯(lián)(按指定的順序)將用作指令集。

      -F Ere請(qǐng)使用 Ere 變量指定的擴(kuò)展正則表達(dá)式作為字段分隔符。缺省字段分隔符是空格。

      -v Assignment將值指定給 awk 命令編程語言的變量。Assignment 參數(shù)的格式是 Name = Value。Name 

      部分指定變量的名稱并可以是任何下劃線、數(shù)字或字母字符的組合,但它必須以字母字符或下劃線開頭。Value 

      部分也由下劃線、數(shù)字和字母數(shù)字組成,且前面和后面都有一個(gè) "(雙引號(hào)字符,類似于字符串值)。如果 Value 部分是數(shù)字,則也將為變量指定數(shù)字值。 

      -v 標(biāo)志指定的賦值在執(zhí)行 awk 命令程序的任何部分之前發(fā)生,包含 BEGIN 節(jié)。

      Assignment將值指定給 awk 命令編程語言的變量。該值和帶有 -v 標(biāo)志的 Assignment 

      變量具有相同的格式和功能(除了兩者處理的時(shí)間不同以外)。Assignment 參數(shù)在處于命令行時(shí)跟在其后的輸入文件(由 File 

      變量指定)之前處理。如果指定 Assignment 參數(shù)僅優(yōu)先于多個(gè)輸入文件的***個(gè),則賦值在 BEGIN 節(jié)后(如果有)就處理。如果 

      Assignment 參數(shù)出現(xiàn)在***一個(gè)文件后,則在 END 節(jié)(如果有)之前處理賦值。如果不指定輸入文件,則當(dāng)讀取了標(biāo)準(zhǔn)輸入時(shí)處理賦值。

      File指定包含要處理的輸入的文件的名稱。如果不指定 File 變量,或指定了 -(減號(hào)),則處理標(biāo)準(zhǔn)輸入。

      'Program'包含 awk 命令的指令。如果不指定 -f 標(biāo)志,Program 變量應(yīng)該是命令行上的***個(gè)項(xiàng)。它應(yīng)括在 ' '(單引號(hào))中。

 

出口狀態(tài)

該命令返回以下出口值:

      0成功完成。

      >0發(fā)生錯(cuò)誤。

 

可以通過使用 exit [ Expression ] 條件語句來更改程序中的出口狀態(tài)。

示例

  要顯示長(zhǎng)于 72 個(gè)字符的文件的行,請(qǐng)輸入: 

awk  'length  >72'  chapter1

  這選擇 chapter1 文件中長(zhǎng)于 72 個(gè)字符的每一行,并將這些行寫至標(biāo)準(zhǔn)輸出,因?yàn)槲粗付?Action。制表符以 1 個(gè)字符計(jì)數(shù)。

  要顯示字 start 和 stop 之間的所有行,包含“start”和“stop”,請(qǐng)輸入: 

awk  '/start/,/stop/'  chapter1

  要運(yùn)行一個(gè)處理文件 chapter1 的 awk 命令程序 sum2.awk,請(qǐng)輸入: 

awk  -f  sum2.awk  chapter1

  以下程序,sum2.awk,計(jì)算了輸入文件 chapter1 中的第二列的數(shù)字的總和與平均值:

    {

       sum += $2

    }

END {

       print "Sum: ", sum;

       print "Average:", sum/NR;

    }

  ***個(gè)操作將每行的第二個(gè)字段的值添加至變量 sum。當(dāng)***次被引用時(shí),所有的變量都初始化為數(shù)字值 0(零)。第二個(gè)操作前的模式 END 

  使那些操作在讀取了所有輸入文件之后才執(zhí)行。用于計(jì)算平均值的 NR 特殊變量是一個(gè)指定已經(jīng)讀取的記錄的個(gè)數(shù)的特殊變量。

  要以相反順序打印前兩個(gè)字段,請(qǐng)輸入: 

awk '{ print $2, $1 }' chapter1

  以下 awk 的程序 sum3.awk 打印文件 chapter2 

  的前兩個(gè)字段(輸入字段由逗號(hào)和/或空格和跳格隔開),然后合計(jì)***列的數(shù)字,并打印出總和與平均值: 

BEGIN  {FS = ",|[ \t]+"}

       {print $1, $2}

       {s += $1}

END    {print "sum is",s,"average is", s/NR }      

#p#

 

NAME

       awk - pattern-directed scanning and processing language


SYNOPSIS

       awk [ -F fs ] [ -v var=value ] [ 'prog' | -f progfile ] [ file ...  ]


DESCRIPTION

       Awk scans each input file for lines that match any of a set of patterns
       specified literally in prog or in one or more  files  specified  as  -f
       progfile.   With  each  pattern  there can be an associated action that
       will be performed when a line of a file matches the pattern.  Each line
       is  matched  against the pattern portion of every pattern-action state-
       ment; the associated action is performed for each matched pattern.  The
       file  name  - means the standard input.  Any file of the form var=value
       is treated as an assignment, not a filename, and  is  executed  at  the
       time  it  would  have been opened if it were a filename.  The option -v
       followed by var=value is an assignment to be done before prog  is  exe-
       cuted;  any  number  of  -v  options  may be present.  The -F fs option
       defines the input field separator to be the regular expression fs.

       An input line is normally made up of fields separated by  white  space,
       or by regular expression FS.  The fields are denoted $1, $2, ..., while
       $0 refers to the entire line.  If FS is null, the input line  is  split
       into one field per character.

       A pattern-action statement has the form

              pattern { action }

       A  missing  {  action  } means print the line; a missing pattern always
       matches.  Pattern-action statements are separated by newlines or  semi-
       colons.

       An  action  is a sequence of statements.  A statement can be one of the
       following:

              if( expression ) statement [ else statement ]
              while( expression ) statement
              for( expression ; expression ; expression ) statement
              for( var in array ) statement
              do statement while( expression )
              break
              continue
              { [ statement ... ] }
              expression              # commonly var = expression
              print [ expression-list ] [ > expression ]
              printf format [ , expression-list ] [ > expression ]
              return [ expression ]
              next                    # skip remaining patterns on this input line
              nextfile                # skip rest of this file, open next, start at top
              delete array[ expression ]# delete an array element
              delete array            # delete all elements of array
              exit [ expression ]     # exit immediately; status is expression

       Statements are terminated by semicolons, newlines or right braces.   An
       empty  expression-list stands for $0.  String constants are quoted " ",
       with the usual C escapes recognized within.  Expressions take on string
       or numeric values as appropriate, and are built using the operators + -
       * / % ^ (exponentiation), and concatenation (indicated by white space).
       The  operators  !  ++  -- += -= *= /= %= ^= > >= < <= == != ?: are also
       available in expressions.  Variables may  be  scalars,  array  elements
       (denoted  x[i])  or  fields.   Variables  are  initialized  to the null
       string.  Array subscripts may be any string, not  necessarily  numeric;
       this allows for a form of associative memory.  Multiple subscripts such
       as [i,j,k] are permitted; the constituents are concatenated,  separated
       by the value of SUBSEP.

       The  print statement prints its arguments on the standard output (or on
       a file if >file or >>file is present or on a pipe if |cmd is  present),
       separated  by the current output field separator, and terminated by the
       output record separator.  file and cmd may be literal names  or  paren-
       thesized  expressions;  identical string values in different statements
       denote the same open file.  The printf statement formats its expression
       list  according  to  the format (see printf(3)).  The built-in function
       close(expr) closes the  file  or  pipe  expr.   The  built-in  function
       fflush(expr) flushes any buffered output for the file or pipe expr.

       The  mathematical  functions  exp,  log,  sqrt, sin, cos, and atan2 are
       built in.  Other built-in functions:

       length the length of its argument taken as a string, or  of  $0  if  no
              argument.

       rand   random number on (0,1)

       srand  sets seed for rand and returns the previous seed.

       int    truncates to an integer value

       substr(s, m, n)
              the n-character substring of s that begins at position m counted
              from 1.

       index(s, t)
              the position in s where the string t occurs, or  0  if  it  does
              not.

       match(s, r)
              the position in s where the regular expression r occurs, or 0 if
              it does not.  The variables RSTART and RLENGTH are  set  to  the
              position and length of the matched string.

       split(s, a, fs)
              splits  the  string s into array elements a[1], a[2], ..., a[n],
              and returns n.  The separation is done with the regular  expres-
              sion  fs  or with the field separator FS if fs is not given.  An
              empty string as field separator splits the string into one array
              element per character.

       sub(r, t, s)
              substitutes t for the first occurrence of the regular expression
              r in the string s.  If s is not given, $0 is used.

       gsub   same as sub except that all occurrences of the  regular  expres-
              sion  are  replaced;  sub and gsub return the number of replace-
              ments.

       sprintf(fmt, expr, ... )
              the string resulting from formatting expr ...  according to  the
              printf(3) format fmt

       system(cmd)
              executes cmd and returns its exit status

       tolower(str)
              returns  a copy of str with all upper-case characters translated
              to their corresponding lower-case equivalents.

       toupper(str)
              returns a copy of str with all lower-case characters  translated
              to their corresponding upper-case equivalents.

       The ``function'' getline sets $0 to the next input record from the cur-
       rent input file; getline <file sets $0 to the next  record  from  file.
       getline  x  sets  variable x instead.  Finally, cmd | getline pipes the
       output of cmd into getline; each call of getline returns the next  line
       of  output  from cmd.  In all cases, getline returns 1 for a successful
       input, 0 for end of file, and -1 for an error.

       Patterns are arbitrary Boolean combinations (with ! || &&)  of  regular
       expressions  and  relational  expressions.   Regular expressions are as
       defined in re_format(7).  Isolated regular  expressions  in  a  pattern
       apply  to the entire line.  Regular expressions may also occur in rela-
       tional expressions, using the operators ~ and !~.  /re/ is  a  constant
       regular  expression; any string (constant or variable) may be used as a
       regular expression, except in  the  position  of  an  isolated  regular
       expression in a pattern.

       A  pattern  may  consist  of two patterns separated by a comma; in this
       case, the action is performed for all lines from an occurrence  of  the
       first pattern though an occurrence of the second.

       A relational expression is one of the following:

              expression matchop regular-expression
              expression relop expression
              expression in array-name
              (expr,expr,...) in array-name

       where  a  relop  is  any  of  the  six relational operators in C, and a
       matchop is either ~ (matches) or !~ (does not match).  A conditional is
       an  arithmetic expression, a relational expression, or a Boolean combi-
       nation of these.

       The special patterns BEGIN and END  may  be  used  to  capture  control
       before  the first input line is read and after the last.  BEGIN and END
       do not combine with other patterns.

       Variable names with special meanings:

       CONVFMT
              conversion format used when converting numbers (default %.6g)

       FS     regular expression used to separate  fields;  also  settable  by
              option -Ffs.

       NF     number of fields in the current record

       NR     ordinal number of the current record

       FNR    ordinal number of the current record in the current file

       FILENAME
              the name of the current input file

       RS     input record separator (default newline)

       OFS    output field separator (default blank)

       ORS    output record separator (default newline)

       OFMT   output format for numbers (default %.6g)

       SUBSEP separates multiple subscripts (default 034)

       ARGC   argument count, assignable

       ARGV   argument  array, assignable; non-null members are taken as file-
              names

       ENVIRON
              array of environment variables; subscripts are names.

       Functions may be defined (at the position of  a  pattern-action  state-
       ment) thus:

              function foo(a, b, c) { ...; return x }

       Parameters  are  passed  by  value  if scalar and by reference if array
       name; functions may be called recursively.  Parameters are local to the
       function;  all other variables are global.  Thus local variables may be
       created by providing excess parameters in the function definition.


EXAMPLES

       length($0) > 72
              Print lines longer than 72 characters.

       { print $2, $1 }
              Print first two fields in opposite order.

       BEGIN { FS = ",[ \t]*|[ \t]+" }
             { print $2, $1 }
              Same, with input fields separated by  comma  and/or  blanks  and
              tabs.

            { s += $1 }
       END  { print "sum is", s, " average is", s/NR }
              Add up first column, print sum and average.

       /start/, /stop/
              Print all lines between start/stop pairs.

       BEGIN     {    # Simulate echo(1)
            for (i = 1; i < ARGC; i++) printf "%s ", ARGV[i]
            printf "\n"
            exit }


SEE ALSO

       lex(1), sed(1)
       A.  V. Aho, B. W. Kernighan, P. J. Weinberger, The AWK Programming Lan-
       guage, Addison-Wesley, 1988.  ISBN 0-201-07981-X


BUGS

       There are no explicit conversions  between  numbers  and  strings.   To
       force  an expression to be treated as a number add 0 to it; to force it
       to be treated as a string concatenate "" to it.
       The scope rules for variables in functions are a botch; the  syntax  is
       worse.



                                                                        awk(1)

 

責(zé)任編輯:yangsai 來源: centos.99k.org
相關(guān)推薦

2011-08-24 16:48:36

man中文man

2011-08-15 10:21:09

man中文man

2011-08-11 16:11:49

at中文man

2011-08-25 10:21:56

man.conf中文man

2011-08-16 10:21:13

setconsole中文man

2011-08-24 17:06:42

NOTIFY中文man

2011-08-16 09:32:01

quotaoff中文man

2011-08-23 18:05:21

ABORT中文man

2011-08-25 18:14:26

tcflow中文man

2011-08-25 16:55:26

gets中文man

2011-08-12 11:07:19

git中文man

2011-08-25 17:30:26

setbuf中文man

2011-08-15 13:14:44

rmdir中文man

2011-08-24 17:00:04

netdevice中文man

2011-11-01 13:46:50

中文mantac

2011-08-15 09:55:01

ls中文man

2011-08-24 16:20:09

load中文man

2011-08-25 15:47:06

fopen中文man

2011-08-25 16:25:30

fputs中文man

2011-08-25 10:49:28

rpc中文man
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产精品一区二区三区不卡| 亚洲经典中文字幕| 男女爱爱视频网站| 亚洲第一精品网站| 视频一区在线播放| 久久天天躁狠狠躁夜夜躁2014| 美女露出粉嫩尿囗让男人桶| 神马久久资源| 有码一区二区三区| 欧美日韩国产三区| www.日韩在线观看| 日本va欧美va瓶| 992tv成人免费影院| 可以免费看av的网址| 黄色美女久久久| 欧美日韩精品免费| 香港三级韩国三级日本三级| 九七久久人人| 久久久久国产精品厨房| 99精品99久久久久久宅男| 国产精品免费无遮挡无码永久视频| 欧美~级网站不卡| 一本色道久久88精品综合| 动漫美女无遮挡免费| 色8久久久久| 色www精品视频在线观看| 国产va亚洲va在线va| 免费日本一区二区三区视频| 久久久久久久综合| 国产一级特黄a大片99| 国产三级精品在线观看| 蜜臀av性久久久久av蜜臀妖精| 欧美亚洲国产另类| 日本在线视频免费观看| 欧美日韩岛国| 欧美精品性视频| 国产亚洲精品精品精品| 综合综合综合综合综合网| 亚洲成人久久网| 亚洲成人激情小说| 少妇精品在线| 日韩一区二区免费在线电影| 玖玖爱视频在线| 亚洲爱爱视频| 欧美伊人久久久久久午夜久久久久| 国产免费黄视频| 欧美日韩国产观看视频| 亚洲成人tv网| www.av中文字幕| gogo久久| 欧美日韩性视频| 久在线观看视频| 日本在线播放一二三区| 欧美日韩亚洲精品内裤| 国产中文字幕视频在线观看| 国产伦子伦对白在线播放观看| 亚洲一区二区综合| 欧美久久在线观看| xxx.xxx欧美| 黑人巨大精品欧美一区二区| 日韩av在线第一页| 免费成人动漫| 欧美日韩国产一区| 天天av天天操| 成人在线超碰| 亚洲精选一区二区| 91资源在线播放| 91精品啪在线观看国产18| 久久久精品影院| 久久午夜鲁丝片午夜精品| 亚洲高清成人| 日本一本a高清免费不卡| 欧美成人精品网站| 国产麻豆成人传媒免费观看| 岛国视频一区| 国内精品在线视频| 成人免费在线播放视频| 日本国产中文字幕| 亚洲黄色免费av| 欧美日韩精品一区二区三区蜜桃 | 99re8这里只有精品| 污视频免费在线观看| 黄色成人av网| xx欧美撒尿嘘撒尿xx| 天堂久久av| 亚洲老头老太hd| 2025国产精品自拍| 黑人一区二区| 国产精品久久久久久久久久三级 | 亚洲春色在线| 91麻豆免费在线视频| 五月综合激情网| 日韩不卡一二三| 国产精品网站在线看| 一区二区三区国产视频| 久久久精品99| 青青草一区二区三区| 成人激情av| 午夜视频在线观看网站| 精品国产31久久久久久| 在线观看国产一级片| 卡一精品卡二卡三网站乱码| 色小说视频一区| 日产精品久久久| 国产一区二区女| 日韩精品久久一区| а√天堂资源官网在线资源| 欧美日韩国产在线播放网站| 中文字幕xxx| 北岛玲一区二区| 免费一级欧美在线大片| 亚洲美女在线视频| 免费毛片在线播放免费| 奇米影视一区二区三区| 国产欧美在线一区二区| 国产黄色在线免费观看| 91久久精品国产91性色tv| 毛茸茸free性熟hd| 伊人久久大香线蕉综合四虎小说 | 夜夜爽妓女8888视频免费观看| 国产精品69毛片高清亚洲| 欧美综合77777色婷婷| 成人女同在线观看| 日韩欧美在线1卡| 黄色激情小视频| 狂野欧美性猛交xxxx巴西| 韩国成人一区| 91福利在线免费| 日韩欧美成人午夜| 99精品久久久久| 激情五月婷婷综合| 中文字幕一区二区三区有限公司| 日韩电影大全网站| 精品亚洲男同gayvideo网站| 久热精品在线观看| 国产成人欧美日韩在线电影| 99热都是精品| 国产精品高清一区二区| 久久精品国产成人精品| 91 中文字幕| 中文字幕一区在线观看| 中文字幕 91| 爽成人777777婷婷| 国产精品一区二区三区毛片淫片 | 黄色不卡一区| 日本高清不卡在线| 激情小说 在线视频| 色综合网站在线| 国产手机在线观看| 免费永久网站黄欧美| 欧美一区二区三区四区夜夜大片| 澳门成人av网| 一区二区三区黄色| 伊人成人在线观看| 中文字幕日韩精品一区| 欧美国产日韩在线视频| 欧美日本一区二区高清播放视频| 粉嫩av一区二区三区免费观看 | 国产精品传媒视频| 黄色手机在线视频| 日韩欧美视频专区| 91精品久久久久久久久中文字幕| 日本在线视频网| 4438x成人网最大色成网站| 中文字幕电影av| 国产成人精品免费网站| 3d动漫一区二区三区| 在线观看欧美理论a影院| 国产成人91久久精品| 3p在线观看| 91精品国产综合久久久久久久| 乱h高h女3p含苞待放| 国产69精品久久777的优势| 无码粉嫩虎白一线天在线观看| 亚洲另类春色校园小说| 国产精品视频精品| 天堂av中文在线| 亚洲精品久久久一区二区三区 | 人在线成免费视频| 伊人久久久久久久久久久久久 | 亚洲精品乱码久久久久久按摩观| 无码视频一区二区三区| 成人a在线观看高清电影| 日韩精品中文字幕在线一区| 国产精品suv一区二区三区| 亚洲国产电影在线观看| 日本网站在线看| 亚洲影院一区| 在线免费一区| 亚洲精品国产精品粉嫩| 成人国产亚洲精品a区天堂华泰| 激情影院在线| 国产一区二区三区在线视频| 精品久久国产视频| 欧美在线观看你懂的| 538任你躁在线精品视频网站| 91麻豆精东视频| 亚洲综合激情视频| 国产一区二区三区久久久久久久久| 亚洲欧美日韩另类精品一区二区三区| 日本精品视频| 国产精品久久久久久一区二区 | 精品成av人一区二区三区| 亚洲一区亚洲二区亚洲三区| 黄色综合网址| 欧美疯狂xxxx大交乱88av| 成a人v在线播放| 精品福利一区二区三区 | 亚洲妇女成熟| 久久在线精品视频| 国产三级视频在线| 亚洲国产毛片完整版| 91精品国产乱码久久久| 欧美日韩中文字幕在线| 欧美成人三级在线观看| 国产欧美一区二区精品忘忧草 | 久久免费视频在线| 日本中文字幕电影在线免费观看| 亚洲精品久久久久| 亚洲精品福利网站| 91麻豆精品国产91久久久| 九色在线视频观看| av福利在线导航| 大胆欧美人体视频| 在线免费黄色| 一本一道久久a久久精品逆3p | 久久99成人| 国产精品永久在线| 美女网站视频一区| 欧美做受高潮1| 理论片午夜视频在线观看| 欧美激情一区二区三区在线视频观看| 精品孕妇一区二区三区| 在线观看日韩视频| 精品福利视频导航大全| 亚洲人在线观看| 日本成人一区二区三区| 日韩精品在线视频| 天堂资源最新在线| 日韩av最新在线| 天天爱天天干天天操| 亚洲国产黄色片| 日韩中文字幕免费观看| 精品国产免费一区二区三区香蕉| 成 人片 黄 色 大 片| 欧美一区二区成人6969| 国产男女猛烈无遮挡| 337p亚洲精品色噜噜噜| 99热这里只有精品66| 日韩欧美一区在线| 黄色成人一级片| 日韩电影第一页| 国产在线观看精品一区| 国产性猛交xxxx免费看久久| 成人全视频高清免费观看| 在线播放日韩精品| 免费观看久久久久| 欧美成人性色生活仑片| 男女免费观看在线爽爽爽视频| 欧美大片免费观看在线观看网站推荐| av在线播放国产| 欧美国产乱视频| sm性调教片在线观看| 97视频在线观看网址| 午夜伦理福利在线| 国产成人精品在线观看| 婷婷久久综合九色综合99蜜桃| 国产日韩专区在线| 一本一道久久a久久| 国产一区二区自拍| 久草成人资源| 一区二区三区四区五区视频 | 中文字幕av日韩| 伊人网视频在线| 91精品国产入口| 日韩在线视频观看免费| 亚洲欧美日本精品| 免费黄色网址在线观看| 久久久久国产一区二区三区| 亚洲精品一区| 成人午夜在线影院| 欧美综合精品| 一区二区三区观看| 极品少妇一区二区三区| 日韩精品无码一区二区三区免费| 久久狠狠亚洲综合| 国产黑丝在线观看| 国产精品三级电影| 久久精品性爱视频| 欧美在线免费观看视频| av男人天堂网| 亚洲一区www| 欧美家庭影院| 国产精品美女av| 精品国产一区二区三区不卡蜜臂| 农村寡妇一区二区三区| 9999国产精品| 国产真实乱子伦| 国产伦精品一区二区三区免费迷 | 欧美极品欧美精品欧美视频 | 91九色在线看| 国产日韩欧美在线| 欧美freesex8一10精品| 中文字幕一区二区三区精彩视频 | 欧美freesextv| 久久久久久久午夜| 国产美女主播视频一区| 国产精品密蕾丝袜| 亚洲一二三专区| 国产又粗又大又爽| 亚洲三级 欧美三级| 成年人视频免费在线播放| 国产精品偷伦一区二区| 欧美调教在线| 国产精品久久国产| 精品一区二区精品| 男人舔女人下部高潮全视频| 亚洲第一主播视频| 国产色综合视频| 伊人av综合网| 欧美电影h版| 久久国产精品久久精品国产| 欧美成人一区二免费视频软件| 91精品无人成人www| 久久久蜜臀国产一区二区| 国产亚洲精品美女久久久m| 91福利国产在线观看菠萝蜜| 国产精品久久久久久久一区探花| 亚洲精品进入| www.爱色av.com| 成人av电影在线观看| 久久久久无码精品国产| 欧美一级欧美一级在线播放| 777电影在线观看| 国产免费一区视频观看免费| 久久99国内| 国产熟人av一二三区| 国产亚洲欧美日韩俺去了| 国产综合精品视频| 国产偷亚洲偷欧美偷精品| segui88久久综合9999| 国产精品99久久久久久久| 国产精品a级| 无码人妻一区二区三区精品视频| 亚洲美女一区二区三区| 国产男女裸体做爰爽爽| 久久视频免费在线播放| 高清一区二区三区av| 潘金莲一级淫片aaaaaa播放1| 国产乱码一区二区三区| 欧美成人精品欧美一级| 欧美大片国产精品| 97人澡人人添人人爽欧美| 国产精品免费一区二区三区在线观看 | 五月天av网站| 日韩欧美在线影院| 牛牛精品在线视频| 国产欧美日韩综合精品二区| 亚洲免费激情| 久久久无码人妻精品一区| 欧美日韩中文字幕| 在线视频自拍| 成人毛片网站| 久久国产成人| www.4hu95.com四虎| 欧美一区二区三区色| 丁香影院在线| 蜜桃麻豆91| 久久国产福利国产秒拍| 欧美国产精品一二三| 亚洲精品福利在线| a成人v在线| 欧美做暖暖视频| 久久夜色精品一区| 中文字幕人妻丝袜乱一区三区| 色老头一区二区三区在线观看| 国产激情精品一区二区三区| av在线免费观看国产| 久久久久久久综合色一本| 国产精品人人妻人人爽| 久久免费少妇高潮久久精品99| 国产精品片aa在线观看| 欧美性猛交xxxx乱大交91| 亚欧色一区w666天堂| 成年人视频在线看| 国产美女99p| 麻豆成人av在线| 国产精品黄色大片| 日韩中文字幕在线| 红杏视频成人| 男生操女生视频在线观看| 亚洲福利国产精品| 成人欧美亚洲| 黄色国产精品一区二区三区| 久久精品国产999大香线蕉| 日本少妇裸体做爰| 久久久成人精品视频| 亚洲人成精品久久久| 在线观看中文av| 欧美性一级生活|