學習Linux命令 - gawk

名稱

gawk - 模式掃描和處理語言

概要

gawk [POSIX或GNU風格選項] -f 程序文件 [ - ]文件...
gawk [POSIX或GNU風格選項] [ - ] 程序文本文件...

pgawk [POSIX或GNU風格選項] -f 程序文件 [ - ]文件...
pgawk [POSIX或GNU風格選項] [ - ] 程序文本文件...

描述

GawkGNU項目的AWK編程語言的實現。 它符合POSIX 1003.2命令語言和實用程序標準中語言的定義。 該版本反過來是基於Aho,Kernighan和Weinberger 的AWK編程語言中的描述,以及UNIX awk的System V Release 4版本中的其他功能。 Gawk還提供了更多最新的貝爾實驗室awk擴展,以及許多GNU特定的擴展。

Pgawkgawk的簡介版本。 除了程序運行速度更慢之外,它與gawk的每種方法都是相同的,並且它在完成時自動在文件awkprof.out中生成執行配置文件。 請參閱下面的--profile選項。

命令行由gawk自身的選項,AWK程序文本(如果不通過-f--file選項提供)以及要在ARGCARGV預定義的AWK變量中可用的值組成。

選項格式

Gawk選項可以是傳統的POSIX單字母選項,也可以是GNU風格的長選項。 POSIX選項以單個“ - ”開頭,長選項以“ - ”開頭。 為GNU特有的功能和POSIX授權的功能提供了很長的選項。

遵循POSIX標準, gawk特定選項通過參數提供給-W選項。 可以提供多個-W選項每個-W選項都有一個相應的長選項,如下所述。 長選項的參數要么通過=符號的選項加入,沒有中間空格,要么可以在下一個命令行參數中提供它們。 長選項可能會縮寫,只要縮寫保持唯一。

選項

Gawk接受以下選項,按字母順序列出。

-F fs

-字段分隔 fs使用fs作為輸入字段分隔符( FS預定義變量的值)。

-v var = val

--assign var = val在程序開始執行之前,將值val分配給變量var 。 這些變量值可用於AWK程序的BEGIN塊。

-f 程序文件

--file program-file從文件程序 文件中讀取AWK程序源文件 ,而不是從第一個命令行參數中讀取。 可以使用多個-f (或--file )選項。

-mf NNN

-mr NNN將各種內存限制設置為NNN值。 f標誌設置字段的最大數量, r標誌設置最大記錄大小。 這兩個標誌和-m選項來自貝爾實驗室研究版UNIX awk 。 它們被gawk忽略,因為gawk沒有預先定義的限制。

-W compat

-W傳統

--compat

- 傳統 兼容模式下運行。 在兼容模式下, gawk的行為與UNIX awk相同; 沒有一個GNU特定的擴展被識別。 使用 - 傳統優於此選項的其他形式。 有關更多信息,請參見下面的GNU EXTENSIONS

-W copyleft

-W版權

--copyleft

--copyright在標準輸出中打印簡短版本的GNU版權信息消息並成功退出。

-W轉儲變量 [ = 文件 ]

--dump-variables [ = file ]打印全局變量,它們的類型和最終值的排序列表。 如果沒有提供文件gawk將在當前目錄中使用名為awkvars.out的文件。

列出所有全局變量是在程序中查找印刷錯誤的好方法。 如果你有一個包含很多函數的大型程序,並且你想確保你的函數不會無意中使用你本意的全局變量,那麼你也可以使用這個選項。 (這對使用ij等簡單變量名稱是一個特別容易的錯誤。)

-W幫助

-W用法

- 幫幫我

--usage在標準輸出上打印相對簡短的可用選項。 (根據GNU編碼標準 ,這些選項會立即成功退出。)

-W棉絨 [ =致命 ]

--lint [ =致命 ]提供有關對其他AWK實現可疑或不可移植的構造的警告。 有了致命的可選參數,皮棉警告成為致命錯誤。 這可能是激烈的,但它的使用肯定會鼓勵開發更清潔的AWK計劃。

-W lint-old

--lint-old提供有關不能移植到原始版本的Unix awk的構造的警告。

-W gen-po

--gen-po掃描並解析AWK程序,並在標準輸出上生成一個GNU .po格式文件,其中包含程序中所有可本地化字符串的條目。 程序本身沒有執行。 有關.po文件的更多信息,請參閱GNU gettext分發。

-W非十進制數據

- 非十進制數據識別輸入數據中的八進制和十六進制值。 謹慎使用此選項!

-W posix

--posix這會打開兼容模式,並具有以下附加限制:

*

\ x轉義序列無法識別。

*

FS設置為單個空間時,只有空格和製表符用作字段分隔符,而換行符則不是。

*

你不能繼續行嗎?

*

不能識別關鍵字功能的同義詞func

*

運算符**** =不能用來代替^^ =

*

fflush()函數不可用。

-W配置文件 [ = prof_file ]

--profile [ = prof_file ]將profiling數據發送到prof_file 。 缺省值是awkprof.out 。 在使用gawk運行時,配置文件只是該程序的“漂亮打印”版本。 在使用pgawk運行時,配置文件包含程序中左邊界中每個語句的執行計數以及每個用戶定義函數的函數調用計數。

-W重新間隔

--re-interval在正則表達式匹配中啟用間隔表達式 (請參見下面的正則表達式)。 AWK語言中傳統上不提供時間間隔表達式。 POSIX標準添加了它們,以使awkegrep相互一致。 但是,它們的使用很可能會破壞舊的AWK程序,所以如果使用此選項請求或者指定了--posix時, gawk只會提供它們。

-W源程序 文本

--source program-text使用程序文本作為AWK程序源代碼。 此選項允許將庫函數(通過-f--file選項使用)與源代碼在命令行中輸入進行輕鬆混合。 它主要用於shell腳本中使用的大中型AWK程序。

-W版本

--version在標準輸出上打印此特定gawk副本的版本信息。 這主要用於了解系統上當前的gawk副本是否與自由軟件基金會分發的最新副本一致。 報告錯誤時這也很有用。 (根據GNU編碼標準 ,這些選項會立即成功退出。)

-表示選項結束。 這對允許AWK程序自身以“ - ”開頭的更多參數很有用。 這主要是為了與大多數其他POSIX程序使用的參數解析約定保持一致。

在兼容模式下,任何其他選項都會被標記為無效,但會被忽略。 在正常操作中,只要提供了程序文本,就會將未知選項傳遞給ARGV陣列中的AWK程序進行處理。 這對於通過`#!''可執行文件解釋機制運行AWK程序特別有用。

AWK計劃執行

一個AWK程序由一系列模式動作語句和可選的函數定義組成。

模式 { 操作語句 }

函數 名稱 參數列表 ){ 語句 }

Gawk首先從程序文件 (如果指定)讀取程序源,從參數到--source或從命令行中的第一個非選項參數讀取程序源。 -f--source選項可以在命令行上多次使用。 Gawk讀取程序文本,就好像所有程序文件和命令行源文本已經連接在一起。 這對於構建AWK函數庫非常有用,無需將它們包含在每個使用它們的新AWK程序中。 它還提供了將庫函數與命令行程序混合的功能。

環境變量AWKPATH指定在查找使用-f選項命名的源文件時要使用的搜索路徑。 如果此變量不存在,則默認路徑為“。:/ usr / local / share / awk” 。 (實際的目錄可能會有所不同,具體取決於gawk的構建和安裝方式。)如果給-f選項指定的文件名包含“/”字符,則不執行路徑搜索。

Gawk按以下順序執行AWK程序。 首先,執行通過-v選項指定的所有變量賦值。 接下來, gawk將程序編譯成一個內部表單。 然後, gawk執行BEGIN塊(如果有的話)中的代碼,然後繼續讀取ARGV數組中指定的每個文件。 如果命令行上沒有命名文件,則gawk會讀取標準輸入。

如果命令行上的文件名具有var = val形式,則將其視為變量賦值。 變量var將被賦值val 。 (在任何BEGIN塊運行後會發生這種情況。)命令行變量賦值對動態賦值給變量最有用AWK用來控制輸入如何分解為字段和記錄。 如果需要通過單個數據文件進行多次傳遞,則對於控制狀態也很有用。

如果ARGV的特定元素的值為空( “” ), gawk會跳過它。

對於輸入中的每個記錄, gawk會測試它是否與AWK程序中的任何模式相匹配。 對於記錄匹配的每個模式,執行關聯的操作 。 這些模式按照它們在程序中出現的順序進行測試。

最後,在所有輸入耗儘後, gawk將執行END塊中的代碼(如果有的話)。

變量,記錄和字段

AWK變量是動態的; 它們在第一次使用時就已經存在。 它們的值是浮點數字或字符串,或者兩者兼有,取決於它們的使用方式。 AWK也有一維數組; 可以模擬多維的陣列。 幾個預先定義的變量被設置為程序運行; 這些將根據需要進行描述並在下面進行總結。

記錄

通常,記錄由換行符分隔。 您可以通過將值分配給內置變量RS來控制記錄的分隔方式。 如果RS是任何單個字符,則該字符將分隔記錄。 否則, RS是一個正則表達式。 與此正則表達式匹配的輸入中的文本分隔記錄。 但是,在兼容模式下,只有字符串值的第一個字符用於分隔記錄。 如果RS設置為空字符串,則記錄由空行分隔。 當RS設置為空字符串時,除了FS可能具有的任何值之外,換行符總是充當字段分隔符。

字段

當讀取每個輸入記錄時, gawk使用FS變量的值作為字段分隔符將記錄拆分為字段 。 如果FS是單個字符,則字段由該字符分隔。 如果FS是空字符串,則每個單獨的字符將成為一個單獨的字段。 否則, FS預計將是一個完整的正則表達式。 在FS是單個空間的特殊情況下,字段由空格和/或製表符和/或換行符分隔。 (但請參閱下面關於--posix的討論)。 注意: IGNORECASE的值(見下文)也會影響FS是正則表達式時字段的拆分方式,以及RS是正則表達式時如何分隔記錄。

如果FIELDWIDTHS變量設置為以空格分隔的數字列表,則每個字段預計具有固定寬度,並且gawk使用指定的寬度分割記錄。 FS的值被忽略。 為FS分配新值將覆蓋FIELDWIDTHS的使用,並恢復默認行為。

輸入記錄中的每個字段可以通過其位置$ 1$ 2等來引用。 $ 0是整個記錄。 字段不需要被常量引用:

n = 5
打印$ n

打印輸入記錄中的第五個字段。

變量NF被設置為輸入記錄中字段的總數。

引用不存在的字段(即$ NF之後的字段)會生成空字符串。 然而,分配給一個不存在的字段(例如, $(NF + 2)= 5 )會增加NF的值,創建任何以空字符串作為其值的干預字段,並使$ 0的值重新計算,這些字段由OFS的值分隔。 對負數編號字段的引用會導致致命錯誤。 減少NF會導致超過新值的字段值丟失,並且重新計算$ 0的值,字段之間用OFS值分隔。

為現有字段分配值會導致在引用$ 0時重建整個記錄。 同樣,將值分配給$ 0將導致記錄被重新分割,為這些字段創建新的值。

內置變量

Gawk的內置變量是:

ARGC

命令行參數的數量(不包括gawk選項或程序源)。

ARGIND

正在處理當前文件的ARGV中的索引。

ARGV

命令行參數數組。 數組從索引0到ARGC - 1。動態更改ARGV的內容可以控制用於數據的文件。

BINMODE

在非POSIX系統上,指定對所有文件I / O使用“二進制”模式。 數字值1,2或3指定輸入文件,輸出文件或所有文件分別應使用二進制I / O。 “r”“w”的字符串值分別指定輸入文件或輸出文件應使用二進制I / O。 “rw”“wr”的字符串值指定所有文件都應該使用二進制I / O。 任何其他字符串值都被視為“rw” ,但會生成警告消息。

CONVFMT

數字轉換格式默認“%.6g”

ENVIRON

包含當前環境值的數組。 該數組由環境變量索引,每個元素都是該變量的值(例如, ENVIRON [“HOME”]可能是/ home / arnold )。 改變這個數組不會影響程序通過重定向或system()函數產生的環境。

ERRNO

如果系統錯誤發生在getline的重定向, getline讀取期間或close()過程中ERRNO將包含描述錯誤的字符串。 該值需要在非英文語言環境中進行翻譯。

FIELDWIDTHS

以空格分隔的字段寬度列表。 設置時, gawk將輸入分析為固定寬度的字段,而不是將FS變量的值用作字段分隔符。

文件名

當前輸入文件的名稱。 如果在命令行上沒有指定文件, FILENAME的值是`` - ''。 但是, FILENAMEBEGIN塊內部是未定義的(除非由getline設置)。

FNR

當前輸入文件中的輸入記錄編號。

FS

輸入字段分隔符,默認為空格。 請參閱上面的字段

IGNORECASE

控制所有正則表達式和字符串操作的區分大小寫。 如果IGNORECASE具有非零值,則規則中的字符串比較和模式匹配, FS中的字段拆分, RS記錄分隔,與!〜匹配的正則表達式以及gensub()gsub()index()match()split()sub()內置函數在執行正則表達式操作時都會忽略大小寫。 注:數組下標不受影響, asort()函數也不受影響。

因此,如果IGNORECASE不等於零,則/ aB /匹配所有字符串“ab”“aB”“Ab”“AB” 。 與所有AWK變量一樣, IGNORECASE的初始值為零,因此所有正則表達式和字符串操作通常都區分大小寫。 在Unix下,忽略大小寫時使用完整的ISO 8859-1 Latin-1字符集。

皮棉

在AWK程序中提供對--lint選項的動態控制。 如果屬實, gawk將打印lint警告。 如果錯誤,它不會。 當分配字符串值“致命”時 ,lint警告成為致命錯誤,就像--lint =致命 。 任何其他真正的價值只是打印警告。

NF

當前輸入記錄中的字段數。

NR

迄今為止看到的輸入記錄總數。

OFMT

數字的輸出格式默認“%.6g”

OFS

輸出字段分隔符默認為空格。

ORS

輸出記錄分隔符默認為換行符。

PROCINFO

此數組的元素提供有關正在運行的AWK程序的信息。 在某些系統中,陣列中可能存在元素, “group1”“group n 對於某些n ,這是進程所具有的補充組的數量。 使用in運算符來測試這些元素。 以下元素保證可用:

PROCINFO [“EGID”]

getegid (2)系統調用的值。

PROCINFO [“EUID”]

geteuid (2)系統調用的值。

PROCINFO [“FS”]

如果使用FS進行場分割,則為“FS”;如果使用FIELDWIDTHS進行場分割,則使用“FIELDWIDTHS”

PROCINFO [“GID”]

getgid (2)系統調用的值。

PROCINFO [“pgrpid”]

當前進程的進程組ID。

PROCINFO [“PID”]

當前進程的進程ID。

PROCINFO [“PPID”]

當前進程的父進程ID。

PROCINFO [“UID”]

getuid (2)系統調用的值。

RS

輸入記錄分隔符默認為換行符。

RT

記錄終結者。 GawkRT設置為與RS指定的字符或正則表達式匹配的輸入文本。

RSTART

match()匹配的第一個字符的索引; 如果不匹配,則為0。 (這意味著人物指數從一開始。)

RLENGTH

match()匹配的字符串的長度; -1如果不匹配。

SUBSEP

用於分隔數組元素中多個下標的字符,默認為“\ 034”

TEXTDOMAIN

AWK程序的文本域; 用於查找程序字符串的本地化翻譯。

數組

數組的下標用方括號( [] )之間的表達式表示。 如果表達式是表達式列表( exprexpr ...),則數組下標是由每個表達式的(字符串)值的串聯組成的字符串,由SUBSEP變量的值分隔。 該工具用於模擬多維數組。 例如:

我=“A”; j =“B”; k =“C”
x [i,j,k] =“你好,世界\ n”

將字符串“hello,world \ n”分配給由字符串“A \ 034B \ 034C”索引的數組x的元素。 AWK中的所有數組都是關聯的,即通過字符串值進行索引。

特殊運算符可以用於ifwhile語句,以查看數組是否具有由特定值組成的索引。

如果(數組中的val)打印數組[val]

如果數組有多個下標,則使用數組中的(i,j)

in構造也可以用於for循環來遍歷數組的所有元素。

可以使用delete語句從數組中刪除一個元素。 刪除語句也可以用來刪除數組的全部內容,只需指定沒有下標的數組名即可。

可變鍵入和轉換

變量和字段可能是(浮點)數字或字符串,或兩者兼而有之。 如何解釋變量的值取決於其上下文。 如果用在數字表達式中,它將被視為一個數字,如果作為字符串使用,它將被視為字符串。

要強制一個變量被視為一個數字,請給它加0; 強制它被視為一個字符串,並將其與空字符串連接起來。

當必須將字符串轉換為數字時,轉換將使用strtod (3)完成。 通過使用CONVFMT的值作為sprintf (3)的格式字符串將數字轉換為字符串,並將變量的數值作為參數。 但是,儘管AWK中的所有數字都是浮點數,但整數值總是被轉換為整數。 因此,給出

CONVFMT =“%2.2f”a = 12 b = a“”

變量b的字符串值為“12”而不是“12.00”

Gawk執行如下比較:如果兩個變量是數字,則它們在數字上進行比較。 如果一個值是數字,而另一個值是一個“數字字符串”的字符串值,那麼比較也是以數字方式完成的。 否則,數字值將轉換為字符串,並執行字符串比較。 當然,將兩個字符串作為字符串進行比較。 請注意,POSIX標準將“數字字符串”的概念應用於任何地方,甚至應用於字符串常量。 然而,這顯然是不正確的,而gawk並沒有這樣做。 (幸運的是,這在標準的下一個版本中得到了修復。)

請注意,字符串常量(如“57”不是數字字符串,它們是字符串常量。 “數字字符串”的概念僅適用於字段, getline輸入, FILENAMEARGV元素, ENVIRON元素以及由split()創建的數組元素,它們都是數字字符串。 基本思想是用戶輸入 ,只有用戶輸入,看起來數字,應該這樣處理。

未初始化的變量具有數字值0和字符串值“”(空或空字符串)。

八進制和十六進制常量

gawk 3.1版開始您可以在AWK程序源代碼中使用C風格的八進制和十六進制常量。 例如,八進制值011等於十進制數9 ,而十六進制值0x11等於十進制數17。

字符串常量

AWK中的字符串常量是包含在雙引號( )之間的字符序列。在字符串中,某些轉義序列被識別,如C中所示。它們是:

\\

字面反斜杠。

\一個

“警報”字符; 通常是ASCII BEL字符。

\ b

退格。

\F

形式餵。

\ n

新隊。

\ r

回車。

\ t

水平標籤。

符\ v

垂直標籤。

\ x 十六進制數字

\ x後面的十六進制數字字符串表示的字符。 和ANSIC一樣,所有後面的十六進制數字都被認為是轉義序列的一部分。 (這個特性應該告訴我們關於委員會語言設計的一些東西。)例如, “\ x1B”是ASCIIESC(逃逸)角色。

\ ddd

由1位,2位或3位八進制數字序列表示的字符。 例如, “\ 033”是ASCII ESC(轉義)字符。

\ c

字面字符c

轉義序列也可以在常量表達式中使用(例如, / [\ t \ f \ n \ r \ v] /匹配空格字符)。

在兼容模式下,在正則表達式常量中使用八進制和十六進制轉義序列表示的字符時會逐字處理。 因此, / a \ 52b /相當於/ a \ * b /

模式和行動

AWK是一種面向行的語言。 模式首先,然後是行動。 Action語句包含在{}中 。 模式可能會丟失,或者動作可能會丟失,但當然不是兩種。 如果缺少模式,則對每個輸入記錄都執行該操作。 缺少的操作相當於

{print}

打印整個記錄。

註釋以“#”字符開始,並一直持續到行尾。 空白行可用於分隔語句。 通常情況下,語句以換行符結束,但是,對於以``,'', { ,?結尾的行不是這種情況&&|| 。 以doelse結尾的也會自動在下面一行繼續。 在其他情況下,可以通過以'結束'來繼續一行,在這種情況下,換行符將被忽略。

多個語句可以通過用``;'分隔它們在一行上。 這適用於模式動作對(通常情況下)的動作部分內的語句以及模式動作語句本身。

模式

AWK模式可能是以下之一:

BEGIN END / 正則表達式 / 關係表達式 模式 && 模式 模式 || 模式 模式 圖案 圖案 圖案 模式 pattern1 pattern2

BEGINEND是兩種特殊類型的模式,不針對輸入進行測試。 所有BEGIN模式的動作部分被合併,就好像所有的語句都被寫入了一個BEGIN塊一樣。 它們在讀取任何輸入之前執行。 類似地,所有END塊都被合併,並在所有輸入耗盡時(或執行退出語句時)執行。 BEGINEND模式不能與模式表達式中的其他模式組合。 BEGINEND模式不能缺少動作部分。

對於/ 正則表達式 /模式,將為每個與正則表達式匹配的輸入記錄執行關聯語句。 正則表達式與egrep (1)中的正則表達式相同,總結如下。

關係表達式可以使用以下在操作部分定義的任何操作符。 這些通常測試某些字段是否匹配某些正則表達式。

&&|| ,和 運算符分別與C中的邏輯AND,邏輯OR和邏輯NOT一樣。它們也像C中一樣進行短路評估,並用於組合更多原始模式表達式。 和大多數語言一樣,可以使用括號來改變評估順序。

?:操作符與C中的相同操作符相同。如果第一個模式為true,則用於測試的模式是第二個模式,否則是第三個模式。 只評估第二種和第三種模式中的一種。

表達式的pattern1 pattern2形式稱為範圍模式 。 它匹配以匹配pattern1的記錄開始的所有輸入記錄,並且一直持續到匹配pattern2 (包含)的記錄。 它不與任何其他類型的模式表達式結合使用。

常用表達

正則表達式是egrep中的擴展類型。 它們由以下字符組成:

C

匹配非元字符c

\C

匹配文字字符c

匹配任何字符, 包括換行符。

^

匹配字符串的開頭。

$

匹配字符串的結尾。

[ abc ... ]

字符列表,匹配任何字符abc ...。

[^ abc ... ]

否定字符列表,匹配除abc之外的任何字符...。

r1 | R2

交替:匹配r1r2

R1R2

連接:匹配r1 ,然後匹配r2

r +

匹配一個或多個r

r *

匹配零個或多個r

r

匹配零個或一個r

r

分組:匹配r

r { n }

r { n ,}

r { n m }花括號中的一個或兩個數字表示間隔表達式 。 如果大括號中有一個數字,則前面的正則表達式r重複n次。 如果有兩個數字用逗號分隔,則r重複nm次。 如果有一個數字後跟一個逗號,則r至少重複n次。

只有在命令行中指定了--posix--re-interval,才能使用間隔表達式。

\ÿ

匹配單詞開頭或結尾的空字符串。

\乙

匹配單詞中的空字符串。

\ <

匹配單詞開始處的空字符串。

\>

匹配單詞末尾的空字符串。

\ W

匹配任何單詞組成字符(字母,數字或下劃線)。

\ W

匹配任何不是以字為單位的字符。

\`

匹配緩衝區(字符串)開始處的空字符串。

''

匹配緩衝區末尾的空字符串。

在字符串常量中有效的轉義序列(見下文)在正則表達式中也是有效的。

字符類是POSIX標準中引入的一項新功能。 字符類是用於描述具有特定屬性的字符列表的特殊符號,但是實際字符本身可能因國家/地區和/或字符集到字符集而異。 例如,在美國和法國,什麼是字母字符的概念是不同的。

字符類僅在字符列表的括號的正則表達式中有效。 字符類由[: ,表示類的關鍵字和:]組成 。 由POSIX標准定義的字符類是:

[:alnum:]

字母數字字符。

[:α:]

字母字符。

[:空白:]

空格或製表符。

[:CNTRL:]

控製字符。

[:數字:]

數字字符。

[:圖形:]

既可打印又可見的字符。 (空格是可打印的,但不可見,而a是兩者。)

[:降低:]

小寫字母字符。

[:打印:]

可打印字符(不是控製字符的字符)。

[:PUNCT:]

標點字符(不是字母,數字,控製字符或空格字符的字符)。

[:空間:]

空格字符(例如空格,製表符和換頁符等等)。

[:上:]

大寫字母字符。

[:xdigit:]

字符是十六進制數字。

例如,在POSIX標準之前,為了匹配字母數字字符,您必須編寫/ [A-Za-z0-9] / 。 如果您的字符集中包含其他字母字符,則這些字符與它們不匹配,並且如果您的字符集與ASCII的排序方式不同,這可能甚至不匹配ASCII字母數字字符。 使用POSIX字符類,您可以編寫/ [[:alnum:]] / ,這與字符集中的字母和數字字符相匹配。

在字符列表中可以出現兩個額外的特殊序列。 這些適用於非ASCII字符集,它可以具有多個字符表示的單個符號(稱為整理元素 ),以及用於整理或排序目的相當的幾個字符。 (例如,用法語,一個簡單的“e”和一個帶重音符號的e是相同的。)

整理符號

整理符號是一個多字符整理元素,封閉在[。] 。 例如,如果ch是一個整理元素,那麼[[.ch。]]是一個匹配此整理元素的正則表達式,而[ch]是一個匹配ch的正則表達式。

等同類

等價類是等價的字符列表的特定於語言環境的名稱。 名稱包含在[==]中 。 例如,名字e可以用來表示所有的“e”,“e”,“'和”e“。'在這種情況下, [[= e =]]是一個正則表達式匹配ee'e`中的任何一個。

這些功能在非英語語言環境中非常有用。 gawk用於正則表達式匹配的庫函數目前僅識別POSIX字符類; 他們不識別整理符號或等價類。

\ y\ B\ <\>\ w\ W\\'操作符是特定於gawk的 ; 它們是基於GNU正則表達式庫中的設施的擴展。

各種命令行選項控制gawk如何解釋正則表達式中的字符。

沒有選擇

在默認情況下, gawk提供了上述POSIX正則表達式和GNU正則表達式運算符的所有功能。 但是,不支持區間表達式。

--posix

只支持POSIX正則表達式,GNU運算符並不特殊。 (例如\ w匹配文字w )。 間隔表達式是允許的。

--traditional

傳統的Unix awk正則表達式是匹配的。 GNU運算符不是特殊的,區間表達式不可用,也不是POSIX字符類( [[:alnum:]]等等)。 由八進制和十六進制轉義序列描述的字符被字面處理,即使它們表示正則表達式元字符。

--re間隔

即使已提供--traditional ,也允許在正則表達式中使用區間表達式。

操作

Action語句包含在大括號{}中 。 Action語句由大多數語言中常見的賦值語句,條件語句和循環語句組成。 可用的操作符,控制語句和輸入/輸出語句在C中的那些模式之後形成圖案。

運營商

AWK中的運算符按優先級遞減順序排列

...

分組

$

字段參考。

++ -

增量和減量,前綴和後綴。

^

指數運算( **也可以使用, ** =用於賦值運算符)。

+ - !

一元加,一元減,邏輯否定。

* /%

乘法,除法和模數。

+ -

加減。

空間

字符串連接。

<>

<=> =

!= ==常規的關係運算符。

〜!〜

正則表達式匹配,否定匹配。 注意:請勿在!〜的左側使用常量正則表達式( / foo / )。 只在右側使用一個。 表達式/ foo / 〜exp的含義與(($ 0〜/ foo /) 〜exp )相同 。 這通常不是預期的。

數組成員。

&&

邏輯AND。

||

邏輯或。

C條件表達式。 這有形式expr1 expr2 expr3 。 如果expr1為true,則表達式的值為expr2 ,否則為expr3 。 只評估expr2expr3中的一個。

= + = - =

* = / =%= ^ =分配。 支持絕對賦值 var = value 和運算符賦值(其他形式)。

控制陳述

控制聲明如下:

if( condition 語句 [ else 語句 ] while( condition 語句 do 語句 while( condition for( expr1 ; expr2 ; expr3 語句 for( var in array 語句 break 繼續 刪除 array [ index ] delete array exit [ expression ] { 語句 }

I / O語句

輸入/輸出語句如下所示:

關閉( 文件 [ 如何 ]

關閉文件,管道或協同處理。 只有在將雙向管道的一端關閉到協同進程時才可以使用該選項。 它必須是一個字符串值,可以是“to”“from”

函數getline

從下一個輸入記錄中設置$ 0 ; 設置NFNRFNR

getline < 文件

文件的下一個記錄中設置$ 0 ; 設置NF

getline var

從下一個輸入記錄中設置var ; 設置NRFNR

getline var < 文件

從下一個文件記錄中設置var

命令 | getline [ var ]

運行命令將輸出連接到$ 0var ,如上所述。

命令 |&getline [ var ]

運行命令作為一個協處理過程將輸出傳遞到$ 0var ,如上所述。 協同過程是一個gawk擴展。

下一個

停止處理當前輸入記錄。 下一個輸入記錄被讀取,處理將在AWK程序中的第一個模式開始。 如果達到輸入數據的結尾,則執行END塊(如果有)。

下一文件

停止處理當前的輸入文件。 下一個輸入記錄讀取來自下一個輸入文件。 FILENAMEARGIND被更新, FNR被重置為1,並且AWK程序中的第一個模式重新開始處理。 如果達到輸入數據的結尾,則執行END塊(如果有)。

打印

打印當前記錄。 輸出記錄以ORS變量的值結束。

打印 expr列表

打印表達式。 每個表達式都由OFS變量的值分隔。 輸出記錄以ORS變量的值結束。

打印 expr-list > 文件

文件上打印表達式。 每個表達式都由OFS變量的值分隔。 輸出記錄以ORS變量的值結束。

printf fmt,expr-list

格式和打印。

printf fmt,expr-list > 文件

格式化並打印文件

系統( cmd-line

執行命令cmd-line ,並返回退出狀態。 (這可能不適用於非POSIX系統。)

fflush( [ 文件 ]

刷新與打開的輸出文件或管道文件相關聯的任何緩衝區。 如果文件丟失,則標準輸出將被刷新。 如果file是空字符串,則所有打開的輸出文件和管道都會刷新其緩衝區。

printprintf允許額外的輸出重定向。

打印... >> 文件

將輸出附加到文件

打印... | 命令

寫在管道上。

打印... |& 命令

將數據發送到協同進程。

getline命令在文件結尾處返回0,在錯誤時返回-1。 出錯時, ERRNO包含描述問題的字符串。

注意:如果使用管道或協同處理來獲取循環,或者通過循環中的printprintf ,則必須使用close()來創建命令的新實例。 AWK在返回EOF時不會自動關閉管道或協同進程。

printf聲明

printf語句和sprintf()函數的AWK版本(見下文)接受以下轉換規範格式:

%C

一個ASCII字符。 如果用於%c的參數是數字,則將其視為字符並進行打印。 否則,該參數被假定為一個字符串,並且該字符串的唯一第一個字符被打印出來。

%d%i

一個十進制數(整數部分)。

%e,%E

一個形式為[ - ] d.dddddde [+ - ] dd的浮點數%E格式使用E而不是e

%F

一個形式為[ - ] ddd.dddddd的浮點數

%g,%G

使用%e%f轉換,以較短者為準,禁止顯著的零。 %G格式使用%E而不是%e

Ø%

一個無符號的八進制數(也是一個整數)。

%u一個無符號的十進制數(又是一個整數)。

%S

一個字符串。

%x,%X

無符號的十六進制數字(整數)。 %X格式使用ABCDEF而不是abcdef

%%

單個字符; 沒有參數被轉換。

可選的,額外的參數可能位於和控製字母之間:

計數 $

在格式化的這一點上使用count'th參數。 這稱為位置說明符 ,主要用於格式字符串的翻譯版本,而不是AWK程序的原始文本。 這是一個gawk擴展。

-

該表達應在其領域內左對齊。

空間

對於數字轉換,前綴為正值,空格為負值,負號為負值。

+

在寬度修飾符(見下文)之前使用的加號表示始終為數字轉換提供一個符號,即使要格式化的數據為正數。 +覆蓋空格修飾符。

對某些控製字母使用“替代形式”。 對於%o ,提供一個前導零。 對於%x%X ,為非零結果提供前導的0x0X 。 對於%e%E%f ,結果始終包含一個小數點。 對於%g%G ,尾部零不會從結果中刪除。

0

前導0 (零)用作標誌,表示輸出應該用零填充而不是空格。 這甚至適用於非數字輸出格式。 此標誌僅在字段寬度比要打印的值寬時才起作用。

寬度

該字段應填充到此寬度。 該字段通常用空格填充。 如果0標誌已被使用,則用0填充。

PREC

指定打印時使用的精確度的數字。 對於%e%E%f格式,這指定了您想要打印到小數點右側的位數。 對於%g%G格式,它指定了有效位數的最大值。 對於%d%o%i%u%x%X格式,它指定要打印的最小位數。 對於%s ,它指定應該打印的字符串的最大字符數。

ANSI C printf()例程的動態寬度預先功能均受支持。 A *代替寬度或預定義規格會使它們的值從參數列表中獲取到printfsprintf() 。 要使用具有動態寬度或精度的位置說明符,請在格式字符串中的*之後提供計數 $ 。 例如, “%3 $ * 2 $。* 1 $ s”

特殊文件名稱

當從printprintf執行I / O重定向到文件或通過文件中的getline進行時, gawk會在內部識別某些特殊文件名。 這些文件名允許訪問從gawk的父進程(通常是shell)繼承的打開的文件描述符。 這些文件名也可用於命令行命名數據文件。 文件名是:

的/ dev /標準輸入

標準輸入。

的/ dev /標準輸出

標準輸出。

的/ dev /標準錯誤

標準錯誤輸出。

/ dev / fd / n

與打開的文件描述符n關聯的文件。

這些對於錯誤消息特別有用。 例如:

打印“你吹了它!” >“/ dev / stderr”

否則你將不得不使用

打印“你吹了它!” | “貓1&2”

以下特殊文件名可用於|& co-process操作員以創建TCP / IP網絡連接。

/ inet / tcp / lport / rhost / rport

本地端口lport上的TCP / IP連接文件到遠程端口rport上的遠程主機rhost 。 使用0端口讓系統選擇一個端口。

/ inet / udp / lport / rhost / rport

類似的,但使用UDP / IP而不是TCP / IP。

/ inet / raw / lport / rhost / rport

保留以供將來使用。

其他特殊文件名可以訪問有關正在運行的gawk進程的信息。 這些文件名現在已經過時。 使用PROCINFO數組獲取它們提供的信息。 文件名是:

的/ dev / PID

讀取該文件將返回當前進程的進程ID(十進制),並以換行符結尾。

的/ dev / PPID

讀取該文件將返回當前進程的父進程ID(十進制),並以換行符結尾。

的/ dev / pgrpid

讀取此文件將返回當前進程的進程組標識(十進制),並以換行符結尾。

的/ dev /用戶

讀取此文件將返回以換行符結尾的單個記錄。 這些字段用空格分隔。 $ 1getuid (2)系統調用的值, $ 2geteuid (2)系統調用的值, $ 3getgid (2)系統調用的值, $ 4getegid (2)的值。系統調用。 如果有其他字段,則它們是由getgroups (2)返回的組ID。 所有系統可能不支持多個組。

數字函數

AWK具有以下內置的算術功能:

atan2( y x

以弧度返回y / x的反正切值。

cos( expr

返回以弧度表示的expr的餘弦值。

exp( expr

指數函數。

int( expr

截斷為整數。

日誌( expr

自然對數函數。

RAND()

返回0到1之間的隨機數。

罪( expr

返回expr的正弦值,以弧度表示。

sqrt( expr

平方根函數。

srand( [ expr ]

expr用作隨機數生成器的新種子。 如果沒有提供expr ,則使用一天中的時間。 返回值是隨機數生成器的先前種子。

字符串函數

Gawk具有以下內置的字符串函數:

asort( s [ d ]

返回源數組中元素數量。 s的內容使用gawk用於比較值的正常規則進行排序, s的排序值的索引用從1開始的順序整數替換。如果指定了可選目標數組d ,則首先將s複製到d ,然後對d進行排序,從而保持源數組索引不變。

gensub( r s h [ t ]

在目標字符串t中搜索正則表達式r的匹配項。 如果h是以gG開頭的字符串,則用s替換r的所有匹配項。 否則, h是一個數字,表示要替換r的哪個匹配項。 如果未提供t ,則使用$ 0 。 在替換文本s中 ,序列\ n (其中n是從1到9的數字)可用於僅指示匹配第n個加括號的子表達式的文本。 序列\ 0表示整個匹配的文本,就像字符&一樣 。 與sub()gsub()不同 ,修改後的字符串作為函數的結果返回,原始目標字符串不會更改。

gsub( r s [ t ]

對於與字符串t中的正則表達式r匹配的每個子字符串,替換字符串s ,並返回替換的數量。 如果未提供t ,請使用$ 0 。 替換文本中的替換為實際匹配的文本。 使用\&獲得一個文字 。 (必須輸入“\\&” ;參見GAWK:有效的AWK編程 ,以更全面地討論sub()gsub()gensub()的替換文本中的和反斜杠的規則。

指數( s t

返回字符串s中字符串t的索引,如果t不存在,則返回0。 (這意味著人物指數從一開始。)

長度( [ s ]

返回字符串 s的長度,如果未提供s ,則返回 $ 0的長度。

match( s r [ a ]

返回正則表達式r出現的s中的位置,如果r不存在,則返回0,並設置RSTARTRLENGTH的值。 請注意,參數順序與運算符相同: str〜re 。 如果提供數組a ,則清除a,然後元素1到n填充s中與r中的相應括號子表達式匹配的部分。 a的第0個元素包含由整個正則表達式r匹配的s部分。

split( s a [ r ]

將字符串s分解到正則表達式r上的數組a中 ,並返回字段數。 如果r省略,則使用FS 。 數組a先被清除。 如上所述,分裂行為與場分裂相同。

sprintf( fmt expr-list

根據fmt打印expr-list ,並返回結果字符串。

strtonum( str

檢查str ,並返回其數值。 如果str 以前導 0開始, strtonum()假定str是八進制數。 如果str從前導的0x0X開始strtonum()就認為str是一個十六進制數字。

sub( r s [ t ]

就像gsub()一樣 ,但只有第一個匹配的子字符串被替換。

substr( s i [ n ]

返回從i開始的最多n個字符的子字符串。 如果省略n ,則使用其餘的s

tolower( str

返回字符串str的一個副本,將str中的所有大寫字符轉換為其對應的小寫字母。 非字母字符保持不變。

toupper( str

返回字符串str的一個副本,將str中的所有小寫字符轉換為其對應的大寫字母。 非字母字符保持不變。

時間函數

由於AWK程序的主要用途之一是處理包含時間戳記信息的日誌文件,因此gawk提供以下函數來獲取時間戳記和格式化它們。

mktime( datespec

將日期規範轉換為與systime()返回的形式相同的時間戳。 datespec是一個形式為YYYY MM DD HH MM SS [DST]的字符串。 字符串的內容是六個或七個數字,分別表示全年,包括世紀,從1到12的月份,從1到31的月份的日期,從0到23的一天中的小時,從0到分鐘的分鐘59,第二個從0到60,以及可選的夏令時標誌。 這些數字的值不需要在指定的範圍內; 例如,1小時-1表示午夜前1小時。 假設原點零公曆零日曆,第0年在第1年和第-1年之前的第0年。時間假定在當地時區。 如果夏令時標誌為正,則時間假定為夏令時; 如果為零,則假定時間為標準時間; 如果為負值(默認值),則mktime()將嘗試確定夏令時是否對指定時間有效。 如果datespec沒有包含足夠的元素或結果時間超出範圍,則mktime()返回-1。

strftime( [ format [ timestamp ]]

根據格式規格格式化時間戳 時間戳應該與systime()返回的格式相同。 如果缺少時間戳 ,則使用當前的一天中的時間。 如果缺少格式,則使用等同於日期 (1)輸出的默認格式。 請參閱ANSI C中strftime()函數的規範,了解可確保可用的格式轉換。 strftime (3)的公共域版本和它的手冊頁帶有gawk ; 如果該版本用於構建gawk ,那麼該手冊頁中描述的所有轉換都可用於gawk。

SYSTIME()

從Epoch(POSIX系統的1970-01-01 00:00:00 UTC)開始的秒數返回當前時間。

位操作函數

gawk版本3.1開始,下列位操作函數可用。 它們通過將雙精度浮點值轉換為無符號長整型,執行操作,然後將結果轉換回浮點型來工作。 功能是:

和( v1 v2

返回由v1v2提供的值的按位與。

compl( val

返回val的按位補碼。

lshift( val count

返回val的值,左移計數位。

或( v1 v2

返回由v1v2提供的值的按位或。

rshift( val count

返回val的值,右移計數位。

xor( v1 v2

返回由v1v2提供的值的按位XOR。

國際化職能

gawk版本3.1開始,可以在AWK程序中使用以下函數來在運行時翻譯字符串。 有關完整的詳細信息,請參閱GAWK:有效的AWK編程

bindtextdomain( directory [ domain ]

指定gawk查找.mo文件的目錄,以防它們不能或不能放置在“標準”位置(例如,在測試期間)。 它返回被綁定的目錄。''

默認TEXTDOMAIN的值。 如果directory是空字符串( “” ),則bindtextdomain()返回給定的當前綁定。

dcgettext( string [ domain [ category ]]

返回區域設置類別類別的文本域域中 字符串的翻譯。 的默認值是TEXTDOMAIN的當前值。 類別的默認值是“LC_MESSAGES”

如果您為類別提供值,則它必須是一個等於GAWK:有效AWK編程中所述的已知語言環境類別之一的字符串。 您還必須提供文本域。 如果您想使用當前域,請使用TEXTDOMAIN

dcngettext( string1string2number [ domain [ category ]]

返回用於區域設置類別類別的文本域域中字符串1字符串2的翻譯編號的複數形式。 的默認值是TEXTDOMAIN的當前值。 類別的默認值是“LC_MESSAGES”

如果您為類別提供值,則它必須是一個等於GAWK:有效AWK編程中所述的已知語言環境類別之一的字符串。 您還必須提供文本域。 如果您想使用當前域,請使用TEXTDOMAIN

用戶定義的函數

AWK中的函數定義如下:

函數 名稱 參數列表 ){ 語句 }

當函數在表達式中以模式或動作調用時執行。 函數調用中提供的實際參數用於實例化函數中聲明的形式參數。 數組通過引用傳遞,其他變量按值傳遞。

由於函數本來不是AWK語言的一部分,因此對局部變量的規定相當笨拙:它們在參數列表中聲明為額外的參數。 約定是通過參數列表中的額外空格將局部變量與真實參數分開。 例如:

函數f(p,q,a,b)#a和b是本地{...} / abc / {...; f(1,2); ...}

函數調用中的左括號需要立即跟隨函數名稱,而不需要任何中間空白。 這是為了避免使用連接運算符的語法歧義。 此限制不適用於上面列出的內置功能。

函數可能會互相調用,並且可能是遞歸的。 用作局部變量的函數參數在函數調用時被初始化為空字符串和數字零。

使用return expr從函數返回一個值。 如果沒有提供任何值,或者函數通過“下降”結束返回值,則返回值不確定。

如果提供了--lintgawk會在解析時調用未定義的函數,而不是在運行時發出警告。 在運行時調用未定義的函數是一個致命錯誤。

func這個詞可以用來代替功能

動態加載新功能

gawk版本3.1開始,您可以動態地向運行的gawk解釋器添加新的內置函數。 完整的細節超出了本手冊頁面的範圍; 有關詳細信息,請參閱GAWK:有效的AWK編程

擴展名( 對象 功能

動態鏈接由object指定的共享對象文件並調用該對像中的函數以執行初始化。 這些都應該作為字符串提供。 返回函數返回的值。

GAWK:有效的AWK編程提供並記錄了此功能,但有關此功能的一切可能會在下一版本中發生變化。 我們強烈建議您不要將此功能用於您不願意重做的任何事情。

SIGNALS

pgawk接受兩個信號。 SIGUSR1會導致它將一個配置文件和函數調用堆棧轉儲到配置文件,該配置文件可能是awkprof.out ,或者是使用--profile選項命名的任何文件。 然後它繼續運行。 SIGHUP導致它轉儲配置文件和函數調用堆棧,然後退出。

例子

打印並排序所有用戶的登錄名: BEGIN {FS =“:”} {print $ 1 | “sort”}}對文件中的行進行計數: {nlines ++} END {print nlines}在文件前面加上每行的編號: {print FNR,$ 0}連接和行號(主題變體): {print NR, $ 0}

內在

字符串常量是用雙引號括起來的字符序列。 在非英語環境中,可以在AWK程序中將字符串標記為需要翻譯為本地自然語言。 這些字符串在AWK程序中用一個前導下劃線(``_'')標記。 例如,

gawk'BEGIN {print“hello,world”}'

總是打印你好,世界 。 但,

gawk'BEGIN {print _“hello,world”}'

可能會在法國打印bonjour,monde

生成和運行可本地化的AWK程序涉及多個步驟。

1。

添加BEGIN操作,為TEXTDOMAIN變量賦值,將文本域設置為與程序關聯的名稱。


BEGIN {TEXTDOMAIN =“myprog”}

這允許gawk找到與你的程序相關的.mo文件。 如果沒有這一步, gawk將使用消息文本域,該域可能不包含程序翻譯。

2。

標記應該用前導下劃線翻譯的所有字符串。

3。

如有必要,酌情在程序中使用dcgettext()和/或bindtextdomain()函數。

4。

運行gawk --gen-po -f myprog.awk> myprog.po為你的程序生成一個.po文件。

5。

提供適當的翻譯,並建立和安裝相應的.mo文件。

GAWK中詳細介紹了國際化功能:有效的AWK編程

Posix兼容性

gawk的主要目標是與POSIX標準以及最新版本的UNIX awk兼容。 為此, gawk集成了以下用戶可見的特性,這些特性在AWK書中沒有描述,但是是貝爾實驗室版本的awk的一部分 ,並且符合POSIX標準。

該書指出,當awk以其他方式將參數作為文件打開時(這是BEGIN塊執行之後),會發生命令行變量賦值。 但是,在早期的實現中,當這種分配出現在任何文件名之前時,分配將 BEGIN塊運行之前發生。 應用程序依賴於這個“特性”。當awk被修改為與其文檔相匹配時,添加-v選項以在程序執行前分配變量,以適應依賴於舊行為的應用程序。 (這個特性得到了貝爾實驗室和GNU開發者的同意。)

實現特定功能的-W選項來自POSIX標準。

處理參數時, gawk使用特殊選項`` - ''來表示參數的結束。 在兼容模式下,它會發出警告,否則會忽略未定義的選項。 在正常操作中,這些參數被傳遞給AWK程序進行處理。

AWK書沒有定義srand()的返回值。 POSIX標準會返回它使用的種子,以便跟踪隨機數字序列。 因此, gawk中的 srand()也返回當前的種子。

其他新功能有:使用多個-f選項(來自MKS awk ); ENVIRON陣列; \ a\ v轉義序列(最初在gawk中完成並反饋到貝爾實驗室版本中); tolower()toupper()內置函數(來自貝爾實驗室版本); 和printf中的ANSI C轉換規範(在貝爾實驗室版本中首次完成)。

歷史特徵

gawk支持的歷史AWK實現有兩個特性。 首先,不僅可以在沒有參數的情況下調用length()內置函數,但即使沒有括號! 從而,

a =長度#Holy Algol 60,蝙蝠俠!

和其中任何一個一樣

a =長度()
a =長度($ 0)

這個特性在POSIX標準中被標記為“deprecated”,如果在命令行中指定了--lintgawk會發出一個關於其使用的警告。

另一個特性是在一段時間內 ,使用continuebreak語句, fordo循環。 傳統的AWK實現將這種用法視為等同於下一個語句。 如果已經指定--traditional,Gawk支持這種用法。

GNU擴展

Gawk有許多對POSIX awk的擴展。 它們在本節中描述。 通過使用--traditional選項調用gawk ,可以禁用此處描述的所有擴展。

gawk的以下功能在POSIX awk中不可用。

*

對通過-f選項命名的文件不執行路徑搜索。 因此AWKPATH環境變量不是特殊的。

*

\ x轉義序列。 (使用--posix禁用。)

*

fflush()函數。 (使用--posix禁用。)

*

繼續行後的能力 。 (使用--posix禁用。)

*

AWK程序中的八進制和十六進制常量。

*

ARGINDBINMODEERRNOLINTRTTEXTDOMAIN變量並不特殊。

*

IGNORECASE變量及其副作用不可用。

*

FIELDWIDTHS變量和固定寬度的字段拆分。

*

PROCINFO數組不可用。

*

RS用作正則表達式。

*

無法識別可用於I / O重定向的特殊文件名。

*

用於創建協同過程的|&運算符。

*

能夠使用空字符串作為FS的值分割出單個字符,並作為split()的第三個參數。

*

close()函數的可選第二個參數。

*

match()函數的可選第三個參數。

*

使用位置說明符printfsprintf()的能力

*

使用delete 數組 刪除 數組的全部內容。

*

使用nextfile放棄當前輸入文件的處理。

*

()asort()bindtextdomain()compl()dcgettext()gensub()lshift()mktime() 或()rshift()strftime()strtonum()systime ()xor()函數。

*

本地化的字符串。

*

使用extension()函數動態添加新的內置函數。

AWK書不定義close()函數的返回值。 Gawkclose()函數分別在關閉輸出文件或管道時從fclose (3)或pclose (3 返回值。 它在關閉輸入管道時返回進程的退出狀態。 如果指定的文件,管道或協處理未使用重定向打開,則返回值為-1。

當使用--traditional選項調用gawk時 ,如果-F選項的fs參數為“t”,則FS設置為製表符。 請注意,輸入gawk -F \ t ...只會引起shell引用``t'',並且不會將``\ t''傳遞給-F選項。 由於這是一個相當醜陋的特例,它不是默認行為。 如果已指定--posix,則也不會發生此行為。 要真正獲得製表符作為字段分隔符,最好使用單引號: gawk -F'\ t'...。

參見其他命令waitlpcompleteexecvgetfaclioctluniqrmmodpvcreatershunix2doscalfscdiwprivswaponautofstalkmotdfreelprexeclfdiskatwhoiwconfigifconfigvgdisplayopenlsmodntohsmailqkillwtmp