劍客二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> " '{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 命令行參數數組