Regex-awk-用法詳解
awk命令 awk是一種程式設計語言,用於在linux/unix下對文本和資料進行處理。資料可以來自標準輸入(stdin)、一個或多個檔案,或其它命令的輸出。它支援使用者自訂函數和動態Regex等先進功能,是linux/unix下的一個強大編程工具。它在命令列中使用,但更多是作為指令碼來使用。awk有很多內建的功能,比如數組、函數等,這是它和C語言的相同之處,靈活性是awk做大的優勢。 awk文法格式: 列印以冒號分隔的第1,2端 [root@test1 test]# awk -F ':' '{print $1,$2}' passwd |head -2 root x bin x # -F指定分隔字元(不加預設為空白格分隔) 使用自訂字元串連每個段 [root@test1 test]# awk -F ':' 'OFS="#" {print $1,$2,$3}' passwd |head -2 root*x*0 bin*x*1 [root@test1 test]# awk -F ':' '{print $1"*"$2"*"$3}' passwd |head -2 root*x*0 bin*x*1 匹配字元或字串 [root@test1 test]# awk '/root/' passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin 匹配字元或字串並輸出指定段 [root@test1 test]# awk -F ':' '/root/ {print $1,$5}' passwd root root operator operator 列印行號和列數 [root@test1 ~]# awk -F ':' '{print NR":"NF}' passwd 1:7 2:7 #awk內建變數 NF(段數) NR(行數) 針對第一段列印匹配字元 [root@test1 ~]# awk -F ':' '$1~/oo/ {print $1}' passwd root # ~ 模糊比對 == 精準匹配 列印匹配第一段匹配或者第三段匹配的整行內容,並且輸出行號 [root@test1 ~]# awk -F ':' '$1~/oo/ || $3>500 {print NR":"$0}' passwd 1:root:x:0:0:root:/root:/bin/bas/mysqlh 23:izabbix:x:501:501::/home/zabbix:/sbin/nologin28374 #$0表示輸出整行 || 或者 && 並且 > < >= <= != == [root@test1 ~]# awk -F ':' 'NR<3 && $1=="root" {print $0}' passwd root:x:0:0:root:/root:/bin/bas/mysqlh 列印第7段的值為3+4並用#號串連 7[root@test1 ~]# awk -F ':' 'OFS="#",$7=$3+$4 {print $0}' passwd root#x#0#0#root#/root#0 bin#x#1#1#bin#/bin#2 daemon#x#2#2#daemon#/sbin#4 列印第三列的累加值 [root@test1 ~]# awk -F ':' '{(sum=sum+$3)}; END {print sum}' passwd 2046 awk中使用if關鍵詞 [root@test1 ~]# awk -F ':' '{if ($1=="root") print $0}' passwd root:x:0:0:root:/root:/bin/bas/mysqlh