免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

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

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

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

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

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

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

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

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

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

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

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

pattern{action}

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

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

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

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

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

省略{action}:等價(jià)于{print},再等價(jià)于{print $0}。

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

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

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

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

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

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

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

# 特殊pattern
BEGIN{}
END{}

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

# 非布爾值pattern
pattern1,pattern2    # 范圍pattern,也稱(chēng)之為flip-flop

 

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
shell之三大文本處理工具grep、sed及awk
如何利用多核CPU來(lái)加速你的Linux命令 — awk, sed, bzip2, grep, wc等 | 外刊IT評(píng)論網(wǎng)
數(shù)據(jù)科學(xué)家的命令行技巧
sed 和 awk 正則表達(dá)式
ubuntu使用教程與常用命令(轉(zhuǎn)載)
玩轉(zhuǎn)Linux命令之三劍客
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服