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. 將每個字段用其絕對值代替
|
13. 計算文件中總的字段和(例如計算單詞數)
|
14. 計算匹配指定信息的總行數
|
15. 找到文件中每行第一個字段中,最大的數,以及其所在的行
|
16. 顯示當前行的字段數,並輸出當前行
|
17. 顯示每行最后一個字段的內容
|
18. 顯示最后一行的最后一個字段
|
19. 顯示字段數小於4的行
|
20. 顯示每行的最后一個字段小於4的行
|