linux(39):shell 列印偶數行,奇數行 ,行號

來源:互聯網
上載者:User

標籤:絕對值   依次   $0   int   tab   單詞   數值   txt   i++   

awk 命令:

1、

列印行號和內容:

awk ‘{print NR":"$0}‘

2、

輸出:偶數行和奇數行到檔案

awk ‘{print $0.txt > NR%2.txt}‘  file

3、

列印出奇數行內容:(三者等價)

awk ‘NR%2==1‘ file  

awk ‘NR%2‘ all_file.txt

awk ‘i=!i‘ file

列印出偶數行的內容:(三者等價)

awk ‘NR%2==0‘ file

awk ‘!(NR%2)‘ file

awk ‘!(i=!i)‘ file

sed 命令:

列印出奇數行:

sed -n ‘1~2p‘  file

列印出偶數行:

sed -n ‘2~2p‘ file

 

擴充內容:

 

 

一. 行距:

1. 每行間加一個空行

 

awk ‘1; { print "" }‘   filname.ext             #輸出當前行,在輸出一個空行

awk ‘1 { print } { print "" }‘   filname.ext

awk ‘{ print } { print "" }‘   filname.ext

2. 1的另外一種實現方法:

 

awk ‘BEGIN { ORS="\n\n" }; 1‘   filname.ext    #預先設定每一行的分隔字元號為兩個換行;你可以嘗試把ORS設定為其他的看看效果如何

3. 僅輸出非空行,並每行間在加一個空行

 

awk ‘NF { print $0 "\n" }‘   filname.ext       #NF表示當前行的欄位數,$0表示當前行,最後再加一個換行

4. 雙倍行距;沒行間兩個空行

 

awk ‘1; { print "\n" }‘   filname.ext     #預設輸出後會換行的,輸出\n,則會輸出兩個空白行

等同於:

 

awk ‘{ print; print "\n" }‘   filname.ext

5. 顯示當前行在所在檔案中的行號

 

awk ‘{ print FNR "\t" $0 }‘   filname.ext      #FNR,表示當前行在檔案中的行號

6. 顯示當前行在本次處理過程中的行號

 

awk ‘{ print NR "\t" $0 }‘   filname.ext       #NR,表示當前行在本次處理過程中的行號

小疑問:為啥有FNR和NR的差別呢?效果不都是一樣嗎? 如果你給如:filname1.ext filname2.ext,你就會看到差別了。原來:FNR,是每個檔案中的,換了一個檔案,會歸零;而NR則每個檔案會累加起來的

 

7. 使用簡單樣式來輸出

 

awk ‘{ printf("] : %s\n", NR, $0) }‘   filname.ext    #行號佔用5位,不足補空格

8. 顯示非空行

 

awk ‘NF { $0=++a " :" $0 }; { print }‘   filname.ext

#NF前面說了,表示當前行的行號,此處用他作為條件,如果是空行,則NF為0,跳過;否則,用動態變數a儲存非空行的數目

9. 計算行數:效果類似wc -l

 

awk ‘END { print NR }‘   filname.ext    #END表示每行都處理完了後,在執行,此時NR就是最後一行的行號,也就是總的行數了。

10. 計算每一行的和

 

awk ‘{ s = 0; for (i = 1; i <= NF; i++) s = s+$i; print s }‘   filname.ext

#s用作每行和的累加,從1到NF(每行總的欄位數),依次累加

 

11. 計算檔案中所有欄位的和

 

awk ‘{ for (i = 1; i <= NF; i++) s = s+$i }; END { print s }‘   filname.ext

#s用作總和的累加,每行都處理完成了,再輸出s;注意和10對比,此處沒有每行清零,所以累加了。沒有設定的變數,預設為空白,但是會根據上下文數值計算情況自動變為0

12. 將每個欄位用其絕對值代替

awk ‘{ for (i = 1; i <= NF; i++) if ($i < 0) $i = -$i; print }‘  filname.ext

#$i表示當前行中的欄位,$0表示當前行,可以改變$i的值

13. 計算檔案中總的欄位和(例如計算單詞數)

awk ‘{ total = total + NF }; END { print total }‘  filname.ext

14. 計算匹配指定資訊的總行數

awk ‘/Linux/ { n++ }; END { print n+0 }‘  filname.ext

15. 找到檔案中每行第一個欄位中,最大的數,以及其所在的行

awk ‘$1 > max { max=$1; maxline=$0 }; END { print max, maxline }‘  filname.ext

#用max儲存最大的數,maxline儲存最大數所在的行,並在最後輸出

16. 顯示當前行的欄位數,並輸出當前行

awk ‘{ print NF ":" $0 } ‘  filname.ext

17. 顯示每行最後一個欄位的內容

awk ‘{ print $NF }‘  filname.ext   #NF表示當前行的欄位數,例如為3,則$NF,就是$3,也就是第三個欄位了

18. 顯示最後一行的最後一個欄位

awk ‘{ field = $NF }; END { print field }‘  filname.ext

#每行處理沒有輸出,盡在最後輸出,field作為每行的最後一行的暫存變數

19. 顯示欄位數小於4的行

awk ‘NF < 4‘  filname.ext   #{}以外的內容,作為條件,沒有{},則預設輸出當前行

20. 顯示每行的最後一個欄位小於4的行

awk ‘$NF < 4‘  filname.ext   #注意和19對比

linux(39):shell 列印偶數行,奇數行 ,行號

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.