--关于内建变量,统一总结下:
1~$n 当前记录的第n个字段,字段间由FS分隔
FS 输入字段分隔符 默认是空格或Tab
NF 当前记录中的字段个数,就是有多少列
NR 已经读出的记录数,就是行号,从1开始,当有多个文件的时候记录数就会累加
FNR 当前记录数,与NR不同的是,这个值会是各个文件自己的行号,多个文件也不会累加
RS 输入的记录分隔符, 默认为换行符
OFS 输出字段分隔符, 默认也是空格
ORS 输出的记录分隔符,默认为换行符
FILENAM 当前输入文件的名字
awk案例
echo "a b c d" |awk '{2" e f g";print}'
格式化文本
awk 'BEGIN{OFS="\t"}{1;print $0}' a.txt
取lo之外的所有ip地址
ifconfig|awk '/inet/ && !(2}'
ifconfig|awk 'BEGIN{RS=""}!/lo/{print $6}'
awk '$6=="LISTEN"' netstat.txt
忽略第一行
ls -rlth|awk 'NR>1 {print $1}'
能输出
awk -F : -v n=3 'n{print 3}' /etc/passwd
awk -F: '$4=="4" {print}' /etc/passwd
不能输出
awk -F : -v n=0 'n{print 3}' /etc/passwd
awk '$3>10{print}' /etc/passwd
查看链接情况
netstat -natp | awk '/^tcp/ {++state[$6]} END {for(key in state) print key,"",state[key]}'
打印长度
awk 'BEGIN{print length("hello")}'
使用函数
awk -F ":" '{print toupper($1)}' /etc/passwd
输出每行倒数4个字符
awk '{print substr(0)-6,length($0))}' /etc/passwd
取IDC最后4位
cat idc.txt |awk '{print toupper(substr(0)-4,length($0)))}'|sort|uniq
匹配有用户的
awk '/usr/' /etc/passwd