日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Linux文本處理三劍客之a(chǎn)wk學(xué)習(xí)筆記02:命令行和語法結(jié)構(gòu)

 小仙女本仙人 2022-05-14

命令行和語法結(jié)構(gòu)

awk [ options ] [ -- ] program-text file ...

options即選項;program-text即awk代碼;file ...即待處理的讀入數(shù)據(jù),可以是文件也可以是標(biāo)準(zhǔn)輸入,只要是數(shù)據(jù)來源即可。

這里比較陌生的是[ -- ],中括號表示可以省略,在解釋“--”含義之前我們先來闡述一下一個bash下命令的選項和參數(shù)。

cmd -x -u root -ppassword a.txt b.txt c.txt
  1. 選項可以有長選項和短選項,例如awk的-f和--file。
  2. 選項按照是否帶有參數(shù)可以分為3種情況:
    1. 不帶參數(shù)的選項。例如cat的-n選項顯示行號,-n選項后面不需要(也不能)帶選項參數(shù)。
    2. 必帶參數(shù)的選項。例如mysql的-u選項必須帶上一個用戶名(mysql -u root),選項的參數(shù)是必須的。
    3. 選帶參數(shù)的選項。例如mysql的-p[password]選項,如果省略了選項參數(shù)password,那么我們需要在隨后的STDIN里面輸入密碼;否則我們就必須在選項后面立即(不能有任何空格)跟上選項參數(shù)password。
  3. 參數(shù)按照出現(xiàn)的位置可以分為2種情況:
    1. 選項型參數(shù):作為選項的參數(shù)出現(xiàn),例如“mysql -u root --database=XXDB”。
    2. 非選項型參數(shù):一般表示命令的作用對象(例如文件等)或其他信息,一般處于命令的尾部或者后半部。

而前文所述的“--”用來標(biāo)識選項到此結(jié)束(類似于用來標(biāo)識文件結(jié)束的EOF標(biāo)識),后面的字符均理解為非選項型參數(shù)(在這里即包含了awk代碼和文件)。

由于選項一般都會包含中劃線“-”,因此如果非選項型參數(shù)包含了這個字符,那么bash就很難理解其到底是一個選項還是一個非選項型參數(shù)。下面就是一個好的例子。

[root@c7-server ~]# grep "-v" test.txt 
^C
[root@c7-server ~]# grep -- "-v" test.txt 
abc-vabc

如果文件名包含了“-”,也可以使用該功能避免歧義。

講完了命令行結(jié)構(gòu)接下來我們來看看語法結(jié)構(gòu)。由雙引號包裹的awk代碼中包含著諸多如下的語法結(jié)構(gòu):

pattern{action}

我們稱其為規(guī)則(rule)。pattern(模式)是表達(dá)式,返回布爾值的條件判斷,返回真的時候我們才執(zhí)行{}中的action(動作)。action一般會對每次讀入的數(shù)據(jù)進(jìn)行操作,不過不是強(qiáng)制,純看action是怎么寫的。

awk 'BEGIN{n=3} ($4<=18){print "teen"} /Alice/{print "Alice"} END{print "hello"}' a.txt

pattern和action都可以省略,不同的省略組合搭配有不同的效果。

省略pattern:會使得每次讀入的數(shù)據(jù)都滿足執(zhí)行action的條件。(有一些此前見過的結(jié)果或者隨著博客的深入慢慢一眼就可以看出結(jié)果的,我就不再寫入博客了。)

~]# awk '{print $0}' a.txt

省略{action}:等價于{print},再等價于{print $0}。

~]# awk '/Alice/' a.txt 
2   Alice   female  24   def@gmail.com  18084925203

僅省略action但是保留大括號:等價于空action,對于滿足條件的數(shù)據(jù)咱啥也不干。

[root@c7-server ~]# awk '/Alice/{}' a.txt 
[root@c7-server ~]#

省略pattern+省略{action},即只剩倆單引號了:這并不會輸出每次讀入的數(shù)據(jù)而是啥也不干。

[root@c7-server ~]# awk '' a.txt 
[root@c7-server ~]#

rule即pattern{action}的組合可以有多個,每次讀入的數(shù)據(jù)都會按照rule的出現(xiàn)順序(CLI中從左往右,代碼文件中從上往下)依次判斷執(zhí)行。同一個pattern代碼塊內(nèi)的多個action在CLI中使用分號分隔,在代碼文件中如果有換行則不需要使用分號分隔,否則需要。

pattern簡述如下,而action有許許多多的指令,它們都會隨著博客的深入會慢慢遇到。

# 特殊pattern
BEGIN{}
END{}

# 布爾值pattern
/REGEXP/    # 正則匹配
relational expression    # 等值比較 3>2{action}
pattern && pattern    # 邏輯與
pattern || pattern    # 邏輯或
! pattern    # 邏輯取反
(pattern)    # 優(yōu)先級置頂
pattern?pattern:pattern    # 條件表達(dá)式(三目運算符)

# 非布爾值pattern
pattern1,pattern2    # 范圍pattern,也稱之為flip-flop

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多