awk


awk用法

awk [-F  field-separator]  'commands'  input-file(s)
内置变量
ARGC               命令行参数个数
ARGV               命令行参数排列
ENVIRON            支持队列中系统环境变量的使用
FILENAME           awk浏览的文件名
FNR                浏览文件的记录数
FS                 设置输入域分隔符,等价于命令行 -F选项
NF                 浏览记录的域的个数
NR                 已读的记录数
OFS                输出域分隔符
ORS                输出记录分隔符
RS                 控制记录分隔符

last -n 5 | awk '{print $1;}'

awk -F: '/root/' /etc/passwd
awk -F: '/^root/' /etc/passwd

awk '/101/'    file      显示文件file中包含101的匹配行。 
awk '/101/,/105/'  file 
awk '$1 == 5'    file 
awk '$1 == "CT"'    file    注意必须带双引号 
awk '$1 * $2 >100 '   file  
awk '$2 >5 && $2<=15'  file

awk '{print NR,NF,$1,$NF,}' file     显示文件file的当前记录号、域数和每一行的第一个和最后一个域。 
awk '/101/ {print $1,$2 + 10}' file  显示文件file的匹配行的第一、二个域加10。 
awk '/101/ {print $1$2}'  file 
awk '/101/ {print $1 $2}' file       显示文件file的匹配行的第一、二个域,但显示时域中间没有分隔符。
---------------------------------------------
awk -f awkfile    file             通过文件awkfile的内容依次进行控制。 
cat awkfile 
/101/{print "\047 Hello! \047"}    --遇到匹配行以后打印 ' Hello! '.  \047代表单引号。 
{print $1,$2}                      --因为没有模式控制,打印每一行的前两个域。
---------------------------------------------
显示用户名和shell
cat /etc/passwd | awk -F':' '{print $1"\t"$7;}'

显示root对应有shell
awk -F: '/root/{print $7}' /etc/passwd

统计某个文件夹下的文件占用的字节数
ls -l |awk 'BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ", size}'

显示有序号的/etc/passwd的账户
awk -F ':' 'BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i = 0; i < NR; i++) print i, name[i]}' /etc/passwd
awk [-F field-separator]  'commands'  input-file(s)
awk -f awk-script-file input-file(s)

field-separator默认为空格

last -n2 | head -2 | awk '{print $1}' 最近登录的2个账号
cat /etc/passwd | awk -F':' '{print $1"\t"$5}' 显示所有账户名

BEGIN END定义行头和行尾:
cat /etc/passwd |awk  -F ':'  'BEGIN {print "name,shell"}  {print $1","$7} END {print "blue,/bin/nosh"}'

定义变量count:
awk 'BEGIN {count=0;print "[start]user count is ", count} {count=count+1;print $0;} END{print "[end]user count is ", count}' /etc/passwd

统计某个文件夹下的文件占用的字节数:
ls -l |awk 'BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ", size}'

显示/etc/passwd的账户(循环语句):
awk -F ':' 'BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i = 0; i < NR; i++) print i, name[i]}' /etc/passwd

awk -F: '/^root/{print $7}' /etc/passwd