精品欧美一区二区三区在线观看 _久久久久国色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)

午夜精品久久久久久久99热黄桃| 91成年人网站| 96av在线| 欧美激情一二三区| 成人黄色网免费| 路边理发店露脸熟妇泻火| 国产乱码精品一区二区三区精东| 欧美福利在线| 亚洲精品乱码久久久久久按摩观| 国产成人精品视频ⅴa片软件竹菊| av资源种子在线观看| 国产精品正在播放| 中文字幕在线亚洲| 日韩高清一二三区| 欧洲亚洲两性| 亚洲男人的天堂一区二区| 国产一区精品在线| 在线观看国产精品视频| 亚洲承认在线| 日韩欧美一级精品久久| 亚洲一区二区高清视频| 亚洲第一页视频| 美女一区二区三区| 在线色欧美三级视频| 成人啪啪18免费游戏链接| 亚洲成人看片| 午夜精品成人在线视频| 正在播放91九色| 中文字幕xxxx| 今天的高清视频免费播放成人| 亚洲视频免费一区| 99精品人妻少妇一区二区| 毛片在线看片| 久久久精品综合| 国产在线精品一区二区三区| 国产视频一区二区三| 日本中文字幕一区二区有限公司| 久久久久久国产精品久久| 99久久久无码国产精品不卡| 国产亚洲第一伦理第一区| 亚洲国产精久久久久久| 麻豆精品国产传媒| 国产一区二区三区黄网站 | 2021亚洲天堂| 国产一区二区| 欧美人体做爰大胆视频| 冲田杏梨av在线| 欧美黑人粗大| 色诱亚洲精品久久久久久| 国产乱子伦农村叉叉叉| 国产免费a∨片在线观看不卡| 老司机午夜精品视频| 午夜精品理论片| 国产av无码专区亚洲av毛网站| 国产精品免费不| 亚洲欧美国产一区二区三区 | 澳门久久精品| 日韩美女在线视频| 国产精品果冻传媒| 国产伦精品一区二区三区在线播放 | 欧美在线电影| 中文字幕欧美日韩| 美女视频久久久| 国产乱论精品| 日韩av综合网| 泷泽萝拉在线播放| 国产中文精品久高清在线不| 一区二区三区国产在线观看| 特黄一区二区三区| 欧美成人高清| 97香蕉超级碰碰久久免费软件| 日韩精品在线不卡| 老鸭窝毛片一区二区三区| 国产成人在线播放| 国产精品久久久久久免费播放| 国产精品1区二区.| 国产欧美日韩亚洲| 视频午夜在线| 国产嫩草影院久久久久| 免费看啪啪网站| 婷婷丁香在线| 精品国产成人av| 国产精品天天av精麻传媒| 青娱乐极品盛宴一区二区| 欧美精品在线观看播放| 久久久老熟女一区二区三区91| 性欧美lx╳lx╳| 一本大道亚洲视频| 久久国产精品国语对白| 亚洲巨乳在线| 国产精品最新在线观看| 亚洲精品字幕在线| 国产日韩高清在线| 国产一区二区视频在线免费观看| 性xxxx18| 国产在线不卡一区| 国产伦精品一区二区三区照片 | 91丝袜一区二区三区| 日本午夜精品视频在线观看 | 激情五月亚洲色图| 91九色成人| 亚洲国内精品在线| 粉嫩精品久久99综合一区| 女人天堂亚洲aⅴ在线观看| 97久久精品国产| 中文av免费观看| 亚洲欧美清纯在线制服| 国产自摸综合网| 亚洲 欧美 精品| 中文字幕一区二区三区蜜月| 久久久99国产精品免费| 麻豆视频在线| 色呦呦日韩精品| 国产精九九网站漫画| 日本欧美视频| 8090成年在线看片午夜| 99免费在线视频| 国产欧美日韩综合| 免费在线观看亚洲视频| 亚洲精品18| 日韩性xxxx爱| 国产女主播喷水视频在线观看| 成人动漫一区二区在线| 51xx午夜影福利| 欧美三级电影网址| 亚洲色图第一页| 日韩欧美亚洲视频| 懂色av一区二区在线播放| 伊人久久青草| 国产一区二区三区四区五区3d | 麻豆电影在线播放| 色菇凉天天综合网| 韩国日本美国免费毛片| 国内露脸中年夫妇交换精品| 欧美成人高清视频| 一级特黄aaa大片| 久久久久久久久久久电影| 国产黄页在线观看| 国产精品久久久久av蜜臀| 久久成人亚洲精品| 国产精品亚洲欧美在线播放| 欧美极品aⅴ影院| 男女爽爽爽视频| 精品国产乱码久久久久久果冻传媒| 一区二区三区天堂av| 可以免费在线观看的av| 99视频超级精品| 极品粉嫩国产18尤物| 成人免费在线电影网| 欧美日韩国产成人高清视频| 国产高清视频免费| 依依成人综合视频| 亚洲无人区码一码二码三码| 狠狠综合久久| 国产一区二区视频在线免费观看| 99爱在线视频| 亚洲乱亚洲乱妇无码| 黄色一级视频免费看| 国产婷婷精品av在线| 亚洲男人天堂色| 日本久久黄色| 亚洲伊人久久大香线蕉av| 在线视频国产区| 精品成人一区二区三区四区| 国产又色又爽又黄的| 2023国产精品| 日韩a级黄色片| 亚洲福利合集| 77777亚洲午夜久久多人| 欧洲亚洲在线| 欧美日韩午夜影院| 国产精品探花一区二区在线观看| 亚洲激情欧美| 欧美日本亚洲| 色8久久久久| 欧美高清视频在线观看| 香蕉久久一区二区三区| 在线欧美一区二区| 久久久久久婷婷| 国产精品日韩欧美一区| 日韩欧美精品久久| 国产乱码精品一区二区三区亚洲人| 欧美日韩成人在线播放| 天天干天天舔天天射| 亚洲免费电影在线| 艳妇乳肉豪妇荡乳xxx| 日韩高清在线观看| 91看片淫黄大片91| 综合伊思人在钱三区| 91av视频在线观看| 成人高清在线| 欧美xxxx老人做受| 亚洲中文一区二区| 一区二区在线观看免费| 国产人妻一区二区| 懂色中文一区二区在线播放| 精品免费国产一区二区| 999久久久久久久久6666| 日韩美女av在线免费观看| gogo在线高清视频| 亚洲色图在线观看| 性猛交富婆╳xxx乱大交天津| 一本色道久久综合亚洲91| 国产精品18在线| 99国产一区二区三精品乱码| 国产婷婷一区二区三区| 日韩欧美三级| 精品国产一区二区三区麻豆免费观看完整版 | 亚洲色图在线看| 内射中出日韩无国产剧情| 国产在线视频一区二区| 黄色一级大片在线观看| 伊人久久婷婷| 天天做天天爱天天高潮| 国产精品一区二区精品视频观看| 欧美亚洲国产视频| 啦啦啦中文在线观看日本| 日韩中文字幕在线免费观看| 国内精品一区视频| 亚洲激情小视频| 性一交一乱一透一a级| 欧美日韩dvd在线观看| 国产又大又粗又爽| 亚洲mv在线观看| 日本裸体美女视频| 久久精品亚洲一区二区三区浴池 | 国产日产精品一区| 久久久久成人精品无码中文字幕| 激情伊人五月天久久综合| 一区二区三区视频在线播放| 女厕嘘嘘一区二区在线播放 | 福利片在线看| 亚洲黄色片网站| 亚洲精选一区二区三区| 欧美一级二级三级乱码| 国产女人18毛片水真多| 欧美日本一区二区| 在线免费一级片| 欧美日韩久久久一区| 中文 欧美 日韩| 欧美日韩在线播放| 中文字幕永久在线观看| 欧美在线免费观看视频| 一级欧美一级日韩片| 成人小视频免费观看| 日本一级大毛片a一 | 久久av无码精品人妻系列试探| 99久久免费国产| 日本一卡二卡在线| 91免费版在线| av电影网站在线观看| 欧美国产日韩a欧美在线观看 | 亚洲精品免费播放| 欧美黄色免费观看| 亚洲一区二区视频在线| 国产精品不卡av| 国产日韩欧美在线一区| 精品日韩在线视频| 国产精品久久一级| 最新在线黄色网址| 寂寞少妇一区二区三区| www.午夜av| 久久九九免费| 成人免费毛片播放| 久久精品国产免费| 亚洲五月激情网| 成人的网站免费观看| 欧美高清性xxxx| 欧美激情一区二区三区蜜桃视频| 国精产品视频一二二区| 亚洲欧美日韩在线播放| 在线看成人av| 色综合一区二区三区| 中文字幕在线日本| 91精品国产综合久久久久久久| 性猛交xxxx乱大交孕妇印度| 国产视频精品自拍| 日韩子在线观看| 欧美极品美女电影一区| 欧美理论影院| 成人一区二区电影| 久久精品色播| 一本色道久久99精品综合| 激情婷婷亚洲| 91色国产在线| 国产福利电影一区二区三区| 美女又爽又黄视频毛茸茸| 国产精品嫩草久久久久| 精品无码人妻一区二区三区品 | 国产精品久久久久久久久毛片| 精品免费国产一区二区三区四区| 男女污视频在线观看| 精品激情国产视频| 神马午夜在线视频| 成人淫片在线看| 亚洲精品小区久久久久久| 黄色网络在线观看| 老司机午夜免费精品视频| 天天爽夜夜爽视频| 国产欧美日韩麻豆91| 久久久久久久久97| 欧美三级电影网| 天天干天天草天天射| 美女精品视频一区| 国产成人精品亚洲日本在线观看| 亚洲伊人一本大道中文字幕| 国产一区二区三区网| 欧美这里只有精品| 久久99九九99精品| 日本黄色福利视频| 久久综合九色综合欧美亚洲| 看片网站在线观看| 欧美性色黄大片| 欧美成人综合在线| 欧美激情高清视频| 国产精品一级在线观看| 视频一区二区在线观看| 99精品全国免费观看视频软件| 激情小视频网站| 国内成人自拍视频| 日本欧美一区二区三区不卡视频| 疯狂蹂躏欧美一区二区精品| 亚洲欧美强伦一区二区| 久久久久999| 欧美男男gaygay1069| 日本欧美精品久久久| av不卡在线| 日韩精品视频一区二区| 亚洲五月六月丁香激情| 国产xxxx在线观看| 久久婷婷国产麻豆91天堂| 成人福利片在线| 日本最新一区二区三区视频观看| 欧美一级专区| 亚洲成人日韩在线| 一本在线高清不卡dvd| 青青草观看免费视频在线| 2021国产精品视频| 欧美三级午夜理伦三级小说| a级黄色一级片| 91亚洲精品一区二区乱码| 日韩av女优在线观看| 亚洲高清色综合| 草草在线观看| 久久爱av电影| 欧美专区在线| 国产jk精品白丝av在线观看| 色8久久人人97超碰香蕉987| 美女做暖暖视频免费在线观看全部网址91| 国产91精品不卡视频| 九九精品久久| 亚洲乱码国产一区三区| 国产精品毛片高清在线完整版| 在线观看黄色国产| 久久视频在线视频| 97青娱国产盛宴精品视频| 国产极品尤物在线| 久久久久99精品国产片| 一区二区视频免费| 久久久国产影院| **爰片久久毛片| 国产网站免费在线观看| 久久精品视频一区二区| 91国产免费视频| 九九精品在线观看| 欧美xxxx在线| 欧美自拍小视频| 亚洲啪啪综合av一区二区三区| 亚洲精品久久久久久久久久久久久久 | 国产激情美女久久久久久吹潮| 亚洲久久在线| 一级在线观看视频| 欧美一卡二卡三卡| 涩涩在线视频| 杨幂一区欧美专区| 福利视频网站一区二区三区| 亚洲精品男人天堂| 日韩视频免费看| av毛片精品| 成人三级视频在线播放| 亚洲图片激情小说| 人妻偷人精品一区二区三区| 国产成人jvid在线播放| 亚洲精品国产首次亮相| 亚洲av网址在线| 56国语精品自产拍在线观看| 大菠萝精品导航| 亚洲一卡二卡三卡四卡无卡网站在线看| 国产高清不卡一区| 999视频在线| 久久久免费高清电视剧观看| 久久久久久久久成人| 国模无码视频一区二区三区| 国产目拍亚洲精品99久久精品 | 亚洲欧洲日韩国产| 国产一区二区三区| 国产一区亚洲二区三区| 一区二区三区日韩欧美| 高清在线观看av| 国产免费一区二区三区|