http://www.zsythink.net/archives/tag/awk/ 强大的awk学习来源
awk 依次处理文件的每一行
【1】默认按照空格或制表符分隔
//输出全部
awk '{print $0 }' filename
//输出指定列,比如第一列
awk '{print $1}' filename
//输出指定列,比如最后一列
awk '{print $NF}' failename
【2】指定分隔符
//按照';'分割所有行的第一个字段
awk -F ':' '{print $1}' filename
//或
awk 'BEGIN{FS=":"} {print $1}' filename
【5】函数
//将每一行第一个字段转成大写
awk '{print toupper($1)}' filename
//将第一行每一个字段转成小写
awk '{print tolower($1) filename
// 返回字符串长度
awk '{print length($1)}' filename
//
【6】设置变量
‘awk -v’
//第一个字段每个数加1
awk -vc=1 '{print $1+c}' filename
【8】条件
//输出包含192的每一行的第一个字段
awk '/192/ {print $1}' filename
//输出同时满足包含192 以及是奇数列的第一个字段
awk '/192/ && NR%2 == 1 {print $1}' filename
//输出满足包含192 或是奇数列的第一个字段
awk '/192/ || NR%2 == 1 {print $1}'
【9】格式化输出
//格式化输出第一个字段到底8个字段,用print
awk '{printf"%-8s %-8s %-18s %-8s %-10s %-18s\n", $1 ,$2,$3,$4,$5,$6,$7,$8}' filename
【7】过滤
比较运算符:!=, >, <, >=, <=,==
//输出所有第一个字段大于2的
awk '$1>2 {print $2}' filename
//输出全部包含192的行
awk '/192/' failname
//输出第6个字段大于9的行
awk '$6>9' failename
【8】内建变量
//$0 当前记录(这个变量中存放着整个行的内容)
//$1~$n 当前记录的第n个字段,字段间由FS分隔
//FS 输入字段分隔符 默认是空格或Tab
//NF 当前记录中的字段个数,就是有多少列
//NR 已经读出的记录数,就是行号,从1开始,如果有多个文件话,这个值也是不断累加中。
//FNR 当前记录数,与NR不同的是,这个值会是各个文件自己的行号
//FILENAME 当前输入文件的名字
//OFS 输出字段分隔符, 默认也是空格
【8-1】变量NF
//输出每一行的最后一个字段
awk '{print $NF}' filename
//输出倒数第二个字段
awk '{print $(NF-1)}' filename
【8-2】NR
awk '{print NR ")" $1}' filename
【8-3】FILENAME
//最后一个字段输出文件的名字
awk '{print FNR ")" $0 FILENAME}' filename
【9】
//