Shell基本學習(7)---三劍客其Awk

劍客二awk

*Awk是linux下的一個命令,同時也是一種語言解析引擎

*Awk具備完整的編程特性。比如執行命令,網絡請求等

數據處理:

(1)數據分割(也可以直接傳入文本)

[root@localhost ~]# echo "zhangsan,lisi,wangwu"
zhangsan,lisi,wangwu
[root@localhost ~]# echo "zhangsan,lisi,wangwu" | awk -F ',' '{print $2}'
lisi
-----
[root@localhost ~]# echo awk -F ',' '{print $2}' test.txt

多個數據的話會將所有數據的選擇的數據拿出來

[root@localhost ~]# echo "zhangsan,lisi,wangwu
a,b,c
1,2,3
" | awk -F "," '{print $2}'
lisi
b
2

一段中內容中去取出中間值

[root@localhost ~]# curl www.baidu.com 2>/dev/null | awk -F "class=cp-feedback>" '{print $2}' | awk -F "</a>&nbsp" '{print $1}'

意見反饋

其他寫法(BEGIN{FS}等同於-F)

[root@localhost ~]# echo '123|456|789' | awk 'BEGIN{FS="|"}{print $2}'
456

RS的用法,RS會將傳入的符號從中間分隔成兩行

[root@localhost ~]# echo '123|456|789+zhangsan|lisi|wangwu' | awk 'BEGIN{FS="|";RS="+"}{print $2}'
456
lisi

NF 與 NR的使用,NF與NR是內置變量,NF可以獲取分割了幾個,打印的是第幾行

[root@localhost ~]# echo '123|456|789+zhangsan|lisi|wangwu' | awk 'BEGIN{FS="|";RS="+"}{print $2;print NF;print NR}'
456
3
1
lisi
3
2

BEGIN END 的用法

語法:

BEGIN{}{}END{}          end的內容只會在最後執行一次

[root@localhost ~]# echo '123|456|789+zhangsan|lisi|wangwu' | awk 'BEGIN{FS="|";RS="+"}{print $2}END{print NF;print NR}'
456
lisi
3
2

打印分割加個數

[root@localhost ~]# echo $PATH | awk 'BEGIN{RS=":"}''{print NR,$0}'
1 /usr/local/sbin
2 /usr/local/bin
3 /usr/sbin
4 /usr/bin
5 /root/bin

內置變量對照表

$0            整行內容
$1-$n         當前行的第1-n個字段
NF            當前行的字段個數,也就是有多少列
NR            當前行的行號,從1開始計數
FNR           多文件處理時,每個文件行號單獨計數,都是從0開始   
FS            輸入字段分割符。不指定默認以空格或tab鍵分割
RS            輸入行分隔符。默認回車換行
OFS           輸出字段分隔符。默認爲空格
ORS           輸出行分隔符。默認爲回車換行
FILENAME      當前輸入的文件名字
ARGC          命令行參數個數
ARGV          命令行參數數組

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章