介 紹:awk主要處理每一行的字段內的數據,默認分隔符:任意數量的空格或者任意數量的tab
用 法:
awk '模式 操作' file ...
1、awk '/正則表達式/ {print ...}' file ... 正則表達式相當於egrep中的正則
注意:模式或者操作都是可選的,若省略操作(比如省略'{print $1}'),則正則模式匹配的整行
下面兩種方式輸出結果一樣
$ cat file_a pa:11:a sa:32:c app:5:b stort:1:d pear:4:aa hello:3:f $ egrep '^a' file_a app:5:b $ awk '/^a/ {print ___FCKpd___0}' file_a app:5:b
awk -F: '$2==""' /etc/passwd 打印以冒號分隔符的第二個字段可空的行
等價於模式: $2 ~ /^$/ 第二個字段匹配為空
$2 !~ /./ ------------>這裡的!~表示不匹配
length($2)==0
!($2 ~ /./)
其他的模式:
NF == 10 10列
NF % 2 == 0 列數為偶數
length($0) > 20
例如:
awk -F: 'length($0) > 30 {print substr($0, 1, 30)}' file 若行過長,則取這一行的前30個字符
3、awk的特殊用法,BEGIN和END兩者可以連用,也可以單獨使用
BEGIN在讀入第一行之前就被執行,可以使用BEGIN模式初始化變量,打印標題頭或通過指定變量FS設置字段分隔符。
END動作在處理完最後一行後執行。
例如:
awk 'BEGIN {FS=":"} $2 != "vobile" {print $0} END {print NR}' file
注意: awk 'BEGIN {FS=":"} $2 != "vobile" END {print NR}' file 這樣是不對的 ,END前和後必須要有操作
4、awk中的算術變量和運算
awk中的真正的實力是對輸入數據進行計算的能力,可以很容易的實現計數、累計求和、求平均數。最常用的是求各數字列的總和。
例如:求第二列之和
$ cat file_a pa:11:a sa:32:c app:5:b stort:1:d pear:4:aa hello:3:f $ awk 'BEGIN {FS=":"} {s = s + $2} END {print s}' file_a 56