標籤:絕對值 依次 $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 列印偶數行,奇數行 ,行號