[shell練習]——awk練習題


1. sed和awk有什么區別?

(1)awk:按列(域)操作;sed:按行操作
(2)awk:文本處理語言,適合對文本進行抽取處理;sed:非交互式的編輯器,適合對文本進行編輯

2. awk要處理域的時候,以哪個參數作為分割參數?

-F

 

3. 請打印出/etc/passwd 第一個域,並且在第一個域所有的內容前面加上“用戶帳號:”
# cat /etc/passwd |awk -F: '{print"用戶帳號:"$1}'

4. 請打印出/etc/passwd 第三個域和第四個域
# awk -F: '{print $3"\t"$4}' /etc/passwd


5. 匹配/etc/passwd 第三域大於100的顯示出完整信息
# cat /etc/passwd |awk -F: '{if($3>100) print$0}'

6. 請打印第一域,並且打印頭部信息為:這個是系統用戶,打印尾部信息為:"================"
# cat /etc/passwd |awk -F: 'BEGIN{print "這個是系統用戶"} {print $1} END{print "================"}'

7. 打印行號小於15的,並且最后一域匹配bash的信息.
# cat /etc/passwd |awk -F: '{if($NR<15 && $NF~/bash/) print$0}'

8. 請打印出第一域匹配daemon的信息.
# cat /etc/passwd |awk -F: '$1=="daemon"'

10. 請打印出第三域數字之和
# cat /etc/passwd |awk -F: '{sum=sum+$3}END{print sum}'
# cat /etc/passwd |awk -F: '{sum=sum+$3};END{print sum}'

11. 請將/etc/passwd 中的root替換成gongda,記住是臨時替換輸出屏幕看到效果即可.
# cat /etc/passwd |awk -F: 'gsub(/root/,"gongda") {print $0}'

12. 請匹配passwd最后一段域bash結尾的信息,有多少條
# awk -F: '($NF~/bash/){print NR}' /etc/passwd |wc -l
# cat /etc/passwd |awk -F: '{if($NF~/bash/) print$0}'|wc -l

13. 請同時匹配passwd文件中,帶mail和bash的關鍵字的信息
# cat /etc/passwd |awk -F: '$0~/root|mail/'
# awk -F: '{if($0~/mail/ || $0~/bash/) print $0}' /etc/passwd


14. 請匹配passwd第三域總大於500的相關信息.
# cat /etc/passwd |awk -F: '{if($3>500) print $0}'

 

15.編寫文件file的內容如下:
Mike Harrington:[510] 548-1278:250:100:175
Christian Dobbins:[408] 538-2358:155:90:201
Susan Dalsass:[206] 654-6279:250:60:50
Archie McNichol:[206] 548-1348:250:100:175
Jody Savage:[206] 548-1278:15:188:150
Guy Quigley:[916] 343-6410:250:100:175
Dan Savage:[406] 298-7744:450:300:275
Nancy McNeil:[206] 548-1278:250:80:75
John Goldenrod:[916] 348-4278:250:100:175
Chet Main:[510] 548-5258:50:95:135
Tom Savage:[408] 926-3456:250:168:200
Elizabeth Stachelin:[916] 440-1763:175:75:300
其中:
Mike Harrington 名字
[510] 548-1278  電話
250:100:175     過去三個月里的捐款

(1)顯示所有電話號碼
# awk -F: '{print $2}' file

(2)顯示Dan的電話號碼
# awk -F: '{if($1~/Dan/) print$2}' file

(3)顯示Susan的名字和電話號碼
# awk -F: '{if($1~/Susan/) print$1,$2}' file

(4)顯示所有以D開頭的姓
# awk -F: '{if($1~/^D/) print$1}' file

(5)顯示所有以一個C或E開頭的名
# awk -F: '{if($1~/^[C|E]/) print$1}' file

(6)顯示所有只有四個字符的名,這里可以使用length函數,舉例: length($1)==10 $1字符為10
# cat file |awk -F: '{print$1}'|awk '{if(length($1)==4) print $1}'

(7)顯示所有區號為916的人名
# cat file |awk '{print$2}'|awk -F: '{if($2~/916/) print$1}'

(8)顯示Mike的捐款.顯示每個值時都有以$開頭.如$250$100$175
# cat file |awk -F: '{if($1~/Mike/) print "$"$3"$"$4"$"$5}'

(9)顯示姓,其后跟一個逗號和名
# cat file |awk -F: '{print$1}'|awk '{print$2","$1}'

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM