自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Ubuntu awk的字段變量內(nèi)建變量

系統(tǒng) Linux
Ubuntu awk 所內(nèi)建的字段變量及其涵意如下 : 字段變量含義$0一字符串, 其內(nèi)容為目前 Ubuntu awk 所讀入的數(shù)據(jù)行.$1$0 上第一個(gè)字段的數(shù)據(jù).$2$0 上第二個(gè)字段的數(shù)據(jù).讀入數(shù)據(jù)行時(shí), Ubuntu awk如何更新(update)這些內(nèi)建的字段變量?

給大家推薦一款很不錯(cuò)的Ubuntu awk系統(tǒng)很有學(xué)習(xí)價(jià)值,這里我主要講解Ubuntu awk系統(tǒng)的應(yīng)用,包括介紹Ubuntu awk知識(shí)等方面。如何執(zhí)行Ubuntu awk 于UNIX的命令行上鍵入諸如下列格式的指令: ( "$"表Shell命令行上的提示符號(hào)) $Ubuntu awk 'Ubuntu awk程序' 數(shù)據(jù)文件文件名 則Ubuntu awk會(huì)先編譯該程序, 然后執(zhí)行該程序來處理所指定的數(shù)據(jù)文件.

(上列方式系直接把程序?qū)懺赨NIX的命令行上)

Ubuntu awk程序的主要結(jié)構(gòu): Ubuntu awk程序中主要語法是 Pattern { Actions}, 故常見之Ubuntu awk 程序其型態(tài)如下 :

  1. Pattern1 { Actions1 }   
  2. Pattern2 { Actions2 }   
  3. Pattern3 { Actions3 }  

Pattern 是什么 ? Ubuntu awk 可接受許多不同型態(tài)的 Pattern. 一般常使用 "關(guān)系表達(dá)式"(Relational expression) 來當(dāng)成 Pattern.

例如:
x > 34 是一個(gè)Pattern, 判斷變量 x 與 34 是否存在大于的關(guān)系. x == y 是一個(gè)Pattern, 判斷變量 x 與變量 y 是否存在等于的關(guān)系. 上式中 x >34 , x == y 便是典型的Pattern. Ubuntu awk 提供 C 語言中常見的關(guān)系運(yùn)算符(Relational Operators) 如 此外, Ubuntu awk 還提供 ~ (match) 及 !~(not match) 二個(gè)關(guān)系運(yùn)算符(注一).

其用法與涵義如下:
若 A 為一字符串, B 為一正則表達(dá)式(Regular Expression)A ~ B 判斷 字符串A 中是否 包含 能匹配(match)B表達(dá)式的子字符串. A !~ B 判斷 字符串A 中是否 不包含 能匹配(match)B表達(dá)式的子字符串.

例如 :
"banana" ~ /an/ 整個(gè)是一個(gè)Pattern. 因?yàn)?banana"中含有可以匹配 /an/ 的子字符串, 故此關(guān)系式成立(true),整個(gè)Pattern的值也是true. 相關(guān)細(xì)節(jié)請(qǐng)參考 附錄 A Patterns, 附錄 E Regular Expression (注一:) 有少數(shù)Ubuntu awk論著, 把 ~, !~ 當(dāng)成另一類的 Operator,并不視為一種 Relational Operator. 本手冊(cè)中將這兩個(gè)運(yùn)算符當(dāng)成一種 Relational Operator.

Actions 是什么?

Actions 是由許多Ubuntu awk指令構(gòu)成. 而Ubuntu awk的指令與 C 語言中的指令十分類似.

例如 :
Ubuntu awk的 I/O指令 : print, printf( ), getline...Ubuntu awk的 流程控制指令 : if(...){..} else{..}, while(...){...}... (請(qǐng)參考 附錄 B --- "Actions" ) Ubuntu awk 如何處理 Pattern { Actions } ? Ubuntu awk 會(huì)先判斷(Evaluate) 該 Pattern 的值, 若 Pattern 判斷后的值為true (或不為0的數(shù)字,或不是空的字符串), 則 Ubuntu awk將執(zhí)行該 Pattern 所對(duì)應(yīng)的 Actions.反之, 若 Pattern 之值不為 true, 則Ubuntu awk將不執(zhí)行該 Pattern所對(duì)應(yīng)的 Actions.

例如 : 若Ubuntu awk程序中有下列兩指令
50 > 23 {print "Hello! The word!!" } "banana" ~ /123/ { print "Good morning !" } Ubuntu awk會(huì)先判斷 50 >23 是否成立. 因?yàn)樵撌匠闪? 所以Ubuntu awk將印出"Hello! The word!!". 而另一 Pattern 為 "banana" ~/123/.

 因?yàn)?banana" 內(nèi)未含有任何子字符串可 match /123/, 該 Pattern 之值為false, 故Ubuntu awk將不會(huì)印出 "Good morning !"
Ubuntu awk 如何處理{ Actions } 的語法?(缺少Pattern部分) 有時(shí)語法 Pattern { Actions }中, Pattern 部分被省略,只剩 {Actions}.這種情形表示 "無條件執(zhí)行這個(gè) Actions".

Ubuntu awk 的字段變量

Ubuntu awk 所內(nèi)建的字段變量及其涵意如下 : 字段變量含義$0一字符串, 其內(nèi)容為目前 Ubuntu awk 所讀入的數(shù)據(jù)行.$1$0 上第一個(gè)字段的數(shù)據(jù).$2$0 上第二個(gè)字段的數(shù)據(jù).讀入數(shù)據(jù)行時(shí), Ubuntu awk如何更新(update)這些內(nèi)建的字段變量?

當(dāng) Ubuntu awk 從數(shù)據(jù)文件中讀取一個(gè)數(shù)據(jù)行時(shí), Ubuntu awk 會(huì)使用內(nèi)建變量$0 予以記錄.每當(dāng) $0 被改動(dòng)時(shí) (例如 : 讀入新的數(shù)據(jù)行 或 自行變更 $0,...) Ubuntu awk 會(huì)立刻重新分析 $0 的字段情況, 并將 $0 上各字段的數(shù)據(jù)用 $1, $2, ..予以記錄.

Ubuntu awk的內(nèi)建變量(Built-in Variables)

Ubuntu awk 提供了許多內(nèi)建變量, 使用者于程序中可使用這些變量來取得相關(guān)信息.常見的內(nèi)建變量有 :

內(nèi)建變量含義
 
NF (Number of Fields)為一整數(shù), 其值表$0上所存在的字段數(shù)目.NR (Number of Records)為一整數(shù), 其值表Ubuntu awk已讀入的數(shù)據(jù)行數(shù)目.FILENAMEUbuntu awk正在處理的數(shù)據(jù)文件文件名.
 
例如 : Ubuntu awk 從資料文件 emp.dat 中讀入第一筆數(shù)據(jù)行 "A125 Jenny 100 210" 之后, 程序中:

  1. $0 之值將是 "A125 Jenny 100 210"   
  2. $1 之值為 "A125"   
  3. $2 之值為 "Jenny"   
  4. $3 之值為 100   
  5. $4 之值為 210   
  6. $NF 之值為 4   
  7. $NR 之值為 1   
  8. $FILENAME 之值為 "emp.dat"  

Ubuntu awk的工作流程 :

執(zhí)行Ubuntu awk時(shí), 它會(huì)反復(fù)進(jìn)行下列四步驟. 自動(dòng)從指定的數(shù)據(jù)文件中讀取一個(gè)數(shù)據(jù)行. 自動(dòng)更新(Update)相關(guān)的內(nèi)建變量之值. 如 : NF, NR, $0... 依次執(zhí)行程序中 所有 的 Pattern { Actions } 指令.

當(dāng)執(zhí)行完程序中所有 Pattern { Actions } 時(shí), 若數(shù)據(jù)文件中還有未讀取的數(shù)據(jù), 則反復(fù)執(zhí)行步驟1到步驟4. Ubuntu awk會(huì)自動(dòng)重復(fù)進(jìn)行上述4個(gè)步驟, 使用者不須于程序中編寫這個(gè)循環(huán) (Loop).

打印文件中指定的字段數(shù)據(jù)并加以計(jì)算Ubuntu awk 處理數(shù)據(jù)時(shí), 它會(huì)自動(dòng)從數(shù)據(jù)文件中一次讀取一筆記錄, 并會(huì) 將該數(shù)據(jù)切分成一個(gè)個(gè)的字段; 程序中可使用 $1, $2,... 直接取得 各個(gè)字段的內(nèi)容. 這個(gè)特色讓使用者易于用 Ubuntu awk 編寫 reformatter 來改變量據(jù)格式.

[ 范例 :] 以文件 emp.dat 為例, 計(jì)算每人應(yīng)發(fā)工資并打印報(bào)表. [ 分析 :] Ubuntu awk 會(huì)自行一次讀入一列數(shù)據(jù), 故程序中僅需告訴 Ubuntu awk 如何處理所讀入的數(shù)據(jù)行. 執(zhí)行如下命令 : ( $ 表UNIX命令行上的提示符 ) $ Ubuntu awk '{ print $2, $3 * $4 }' emp.dat

執(zhí)行結(jié)果如下 : 屏幕出現(xiàn) :

  1. Jenny 21000   
  2. Dan 23650   
  3. Max 27170   
  4. John 27500   
  5. Linda 19950  

[ 說明 :] UNIX命令行上, 執(zhí)行Ubuntu awk的語法為: $Ubuntu awk 'Ubuntu awk程序' 欲處理的資料文件文件名本范例中的 程序部分 為 {print $2, $3 * $4}. 把程序置于命令行時(shí), 程序之前后須以 ' 括住. emp.dat 為指定給該程序處理的數(shù)據(jù)文件文件名.

本程序中使用 : Pattern { Actions } 語法.

Pattern 部分被省略, 表無任何限制條件. 故Ubuntu awk讀入每筆數(shù)據(jù)行后都將無條件執(zhí)行這個(gè) Actions. print為Ubuntu awk所提供的輸出指令, 會(huì)將數(shù)據(jù)輸出到stdout(屏幕). print 的參數(shù)間彼此以 "," (逗號(hào)) 隔開, 印出數(shù)據(jù)時(shí)彼此間會(huì)以空白隔開. (參考 附錄 D 內(nèi)建變量OFS) 將上述的 程序部分 儲(chǔ)存于文件 pay1.Ubuntu awk 中. 執(zhí)行命令時(shí)再指定Ubuntu awk程序文件 之文件名. 這是執(zhí)行Ubuntu awk的另一種方式, 特別適用于程序較大的情況, 其語法如下:

  1. $ Ubuntu awk -f Ubuntu awk程序文件名 數(shù)據(jù)文件文件名 故執(zhí)行下列兩命令,將產(chǎn)生同樣的結(jié)果.   
  2. $ Ubuntu awk -f pay1.Ubuntu awk emp.dat   
  3. $ Ubuntu awk '{ print $2, $3 * $4 }' emp.dat  

讀者可使用 "-f" 參數(shù),讓Ubuntu awk主程序使用“其它僅含 Ubuntu awk函數(shù) 的文件中的函數(shù) ”

其語法如下:

$ Ubuntu awk -f Ubuntu awk主程序文件名 -f Ubuntu awk函數(shù)文件名 數(shù)據(jù)文件文件名 (有關(guān) Ubuntu awk 中函數(shù)的聲明與使用于 7.4 中說明) Ubuntu awk中也提供與 C 語言中類似用法的 printf() 函數(shù). 使用該函數(shù)可進(jìn)一步控制數(shù)據(jù)的輸出格式. 編輯另一個(gè)Ubuntu awk程序如下, 并取名為 pay2.Ubuntu awk { printf("%6s Work hours: %3d Pay: %5d"n", $2,$3, $3* $4) }

執(zhí)行下列命令 $Ubuntu awk -f pay2.Ubuntu awk emp.dat 執(zhí)行結(jié)果屏幕出現(xiàn):

  1. Jenny Work hours: 100 Pay: 21000   
  2. Dan Work hours: 110 Pay: 23650   
  3. Max Work hours: 130 Pay: 27170   
  4. John Work hours: 125 Pay: 27500   
  5. Linda Work hours:  95 Pay: 19950  

【編輯推薦】

  1. Ubuntu awk概述內(nèi)建有pipe的功能
  2. Ubuntu操作系統(tǒng)vim基本使用
  3. Ubuntu AutoIndex一般在編譯時(shí)已經(jīng)安裝好
  4. Ubuntu MySQL設(shè)置同步服務(wù)器
  5. Ubuntu mysql配置設(shè)置過程
責(zé)任編輯:佚名 來源: CSDN博客
相關(guān)推薦

2019-11-26 14:00:58

awkLinux命令

2010-03-04 15:03:26

Ubuntu awk

2016-08-10 16:07:08

awkLinux開源

2016-08-11 09:18:33

awkShellLinux

2017-08-04 14:00:32

Linuxawk變量

2010-09-10 09:47:14

SQL變量指示

2010-02-22 15:04:53

Ubuntu 7.04

2013-05-09 02:38:27

2021-03-25 12:00:18

Python變量常量

2011-06-02 14:25:45

靜態(tài)變量

2010-03-04 15:28:01

Ubuntu Shel

2024-05-29 08:49:22

Python全局變量局部變量

2011-07-11 16:13:01

Java靜態(tài)變量實(shí)例變量

2015-01-07 14:41:32

Android全局變量局部變量

2010-07-13 09:34:24

Perl純變量

2010-11-26 14:39:35

MySQL用戶變量

2021-03-28 23:37:35

線程專屬變量

2010-11-26 14:20:28

MySQL系統(tǒng)變量

2010-09-08 17:29:37

SQL表變量

2009-07-21 16:58:31

Scala變量范圍
點(diǎn)贊
收藏

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