一、awk基本操作
awk指定多個分割符,分隔符中有:和空格,還有:和空格的組合,這個時候需要指定多個分隔符 -F'[ :]+',[ :]表示分隔符為:和空格,一個或者多個+號表示空格和:的組合也為一個分隔符
打印倒數第一列,以空格和:and空格 “:”的組合為分隔符 [root@VM_0_84_centos ~]# cat aaa |awk -F'[: ]+' '{print $NF}' number 100 0 #打印倒數第二列,以空格和:and空格 “:”的組合為分隔符 [root@VM_0_84_centos ~]# cat aaa |awk -F'[: ]+' '{print $(NF-1)}' age 27 30
假如分隔符為空格,打印第一列 $1為第一列的數據 $0打印整個文件的內容
cat aaa |awk '{print $1}'
二、awk的NR、NF內置變量的應用
NF變量的使用:打印文件的字段數,NF指的是字段的數量,有時候由於文本數據量太大,而且字段切分不規則,會導致使用 '{print $n}'取值會出現錯誤,建議使用NF來取響應的字段
[root@VM_0_84_centos ~]# cat aaa name: age number ghd 27 100 gym 30 0 [root@VM_0_84_centos ~]# cat aaa |awk '{print NF}' 3 3 3 [root@VM_0_84_centos ~]# cat aaa |awk '{print $NF}' number 100 0 [root@VM_0_84_centos ~]# cat aaa |awk '{print $(NF-2)}' name: ghd gym [root@VM_0_84_centos ~]# cat aaa |awk '{print NF}'
NR變量:打印文件的行的內容
#打印文件的第二行內容 [root@VM_0_84_centos ~]# cat test.txt |awk 'NR==2{print $0}' ghd 27 100 #打印文件的第二行第一個列(字段)的內容 [root@VM_0_84_centos ~]# cat test.txt |awk 'NR==2{print $1}' ghd #打印大於第一行小於第三行的所屬行的所有字段,$n為字段數(列) cat test.txt |awk 'NR>1&&NR<3{print $0}' ghd 27 100 #不打印第二行的其它行的所有字段 [root@VM_0_84_centos ~]# cat test.txt |awk 'NR!=2{print $0}' name: age number gym 30 0
練習:
打印文件所有內容,並顯示文件內容所屬行和字段
cat test.txt |awk -F'[ :]+' '{print NR,NF,$0}' 1 3 name: age number 2 3 ghd 27 100 3 3 gym 30 0
