Linux之a(chǎn)wk三元運(yùn)算符和打印奇偶行

一、三元運(yùn)算符

  1. 還記的之前學(xué)習(xí)編程語(yǔ)言時(shí)的 " if ... else ... " 結(jié)構(gòu)嗎?其實(shí)我們使用三元運(yùn)算符就可以代替其功能。
  2. 三元運(yùn)算符的形式1:[ 結(jié)果 = 條件 ? 結(jié)果1:結(jié)果2 ]
  3. 三元運(yùn)算符的形式2:[ 條件 ? 表達(dá)式1 : 表達(dá)式2 ]
  4. 代碼示例,如下:
(1) if ... else ... 形式
etl@bejedw09:/home/etl/cya> cat file
student1 98
student2 89
student3 93
student4 78
student5 91
student6 96
etl@bejedw09:/home/etl/cya> awk '{if($2>=90){print $1,"perfect"} \
else { print $1,"come on !!!" } }' file
student1 perfect
student2 come on !!!
student1 perfect
student2 come on !!!
student1 perfect
student1 perfect

(2)三元運(yùn)算符示例1
etl@bejedw09:/home/etl/cya> awk '{type=$2>=90? "perfect":"come on !!!";\
print $1 , type}' file
student1 perfect
student2 come on !!!
student1 perfect
student2 come on !!!
student1 perfect
student1 perfect

(3)三元運(yùn)算符示例2
etl@bejedw09:/home/etl/cya> awk '{$2=90? a++:b++ } END{print a , b}' file
4 2
#可以使用三元運(yùn)算符統(tǒng)計(jì)個(gè)數(shù),成績(jī)大于等于90分的學(xué)生有4個(gè),小于90的也有2個(gè)

二、打印奇偶行

在 Linux 環(huán)境中如果想要打印文件的奇偶行,方法實(shí)在是太多了,先來(lái)看 awk 是如何實(shí)現(xiàn)的

etl@bejedw09:/home/etl/cya> awk 'NR%2==0{print $0}' file
student2 89
student4 78
student6 96
etl@bejedw09:/home/etl/cya> awk 'NR%2!=0{print $0}' file
student1 98
student3 93
student5 91
#awk打印文件的奇偶行

再來(lái)看看 sed 又是如何實(shí)現(xiàn)的

etl@bejedw09:/home/etl/cya> sed -n '2~2p' file
student2 89
student4 78
student6 96
etl@bejedw09:/home/etl/cya> sed -n '1~2p' file
student1 98
student3 93
student5 91
#sed打印文件的奇偶行

上面的兩種 awk 和 sed 打印文件奇偶行的方式已經(jīng)是非常經(jīng)典的了,這里再用 awk 的另外一種方式實(shí)現(xiàn)打印文件奇偶行

etl@bejedw09:/home/etl/cya> awk 'i=!i' file
student1 98
student3 93
student5 91
etl@bejedw09:/home/etl/cya> awk '!(i=!i)' file
student2 89
student4 78
student6 96

#上面這兩條命令是如何實(shí)現(xiàn)打印文件奇偶行的哪?看下面的文字解釋和代碼示例就曉得了^_^
#提示1:在 awk 中,如果省略了模式對(duì)應(yīng)的動(dòng)作,當(dāng)前行滿足模式時(shí),默認(rèn)打印整行,即
#      { print $0 };
代碼示例1:
etl@bejedw09:/home/etl/cya> awk '1' file
student1 98
student2 89
student3 93
student4 78
student5 91
student6 96
etl@bejedw09:/home/etl/cya> awk '0' file
etl@bejedw09:/home/etl/cya> 


#提示2:當(dāng) awk 開始處理第一行時(shí),變量 i 被初始化,變量 i 在被初始化時(shí)值為 "空",
#      在 awk 中,數(shù)字0或者 "空字符串"表示 "假",非0或非空字符串表示"真" 所以
#      可以認(rèn)定上述模式為假,那就是模式不成立所以不需要執(zhí)行對(duì)應(yīng)的動(dòng)作,但是i直接取
#      反了,對(duì)假取反就是真,將取反后的值又賦值給了變量i,所以此刻執(zhí)行print {$0}
#      看下面的命令,我們可以追蹤變量 i 的值,再根據(jù) "代碼示例1" ,屏幕前這么cute、
#      這么clever的讀者一定明明白白的了吧
代碼示例2:
etl@bejedw09:/home/etl/cya> awk '{ i=!i; print i }' file
1
0
1
0
1
0
  • 結(jié)尾
    本文就打印文件奇偶行的問(wèn)題花費(fèi)的筆墨最多,而且介紹了三種方法來(lái)實(shí)現(xiàn),要知道實(shí)際開發(fā)中打印文件奇偶行并不常見(jiàn),至少我工作到現(xiàn)在,幾乎每天都要處理文本,還沒(méi)有碰到過(guò)打印文件奇偶行的需求,那么我們?yōu)槭裁催€要學(xué)習(xí)哪?我也想過(guò)這個(gè)問(wèn)題,上過(guò)高中的同學(xué)都有過(guò)這么的經(jīng)歷,最后高考的題都有固定的題型,我們?cè)谄綍r(shí)的學(xué)習(xí)中做練習(xí)冊(cè)的時(shí)候會(huì)發(fā)現(xiàn)有些題型怪怪的,根本不符合高考的出題規(guī)范,那么這類題的意義是什么哪?高中數(shù)學(xué)老師的解釋是:“這類題型高考不會(huì)出,可是這類題你們也要做,因?yàn)檫@可以讓你們更好的理解這個(gè)知識(shí)點(diǎn)”,同樣的,在這里它就可以幫我們更好的理解 awk 這個(gè)命令,如果你把第三種打印文件奇偶行的方式搞的很明白的話,你就會(huì)發(fā)現(xiàn),你更加了解 awk 包括它的一些默認(rèn)處理,你和 awk 的距離就拉近了,以后遇到文本格式化問(wèn)題使用 awk 就會(huì)變得得心應(yīng)手 ^_^
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯(cuò)誤還是無(wú)法避免 以后資料會(huì)慢慢更新 大...
    數(shù)據(jù)革命閱讀 13,371評(píng)論 2 33
  • 轉(zhuǎn)載 原文的排版和內(nèi)容都更加友好,并且詳細(xì),我只是在這里貼出了一部分留作自己以后參考和學(xué)習(xí),如希望更詳細(xì)了解AWK...
    XKirk閱讀 3,379評(píng)論 2 25
  • 基礎(chǔ)命令 主要的命令和快捷鍵 Linux系統(tǒng)命令由三部分組成:cmd + [options]+[operation...
    485b1aca799e閱讀 1,236評(píng)論 0 0
  • 明天,你好 牛奶咖啡 - Lost & Found去尋找 我想親愛(ài)的你有些疲倦吧 有這樣一群人, 他們?cè)绯鐾須w, ...
    vict_閱讀 888評(píng)論 0 2
  • 熹微,我于纏綿的夢(mèng)意中蘇醒,抖落了臂上晶瑩的露珠,隨著徐徐清風(fēng)伸展腰肢。 又是一個(gè)平凡無(wú)奇的日子!曾愛(ài)暖陽(yáng)、皎月、...
    鄭紅燦1998閱讀 438評(píng)論 0 1

友情鏈接更多精彩內(nèi)容