awk
###awk###
awk -F':' '{print $NF}' /etc/passwd
$NF:输出最后一个字段
awk -F':' '{print $(NF-1)}' /etc/passwd
$(NF-1):输出倒数第二个字段
awk 'NR==3 {print}' /etc/passwd
NR: 打印第几行
awk 'END {print toupper($0)}' /etc/passwd
toupper: 将字符转化成大写
awk 'END {print tolower($0)}' /etc/passwd
tolower: 将字符转化成小写
awk -F ':' '{if ($1=="root") print $1;else print $NF}' passwd
awk可以用正则 如果第一个字段是root 就打印第一行 否则就打印最后一行
seq 10 |awk '{sum+=$0} END {print sum}'
可以求出1-10的和
END:指awk将在它正式退出前执行
awk -F ':' 'BEGIN {print "统计销售金额";sum=0} {print $3;sum+=$3} END {printf "销售金额总计: %d\n",sum}' 1.txt
BEGIN:在指awk在读取任何行之前执行
awk 'BEGIN {FS=":";print "统计销售金额";total=0} {print $3;total=total+$3;} END {printf "销售金额总计: %.2f\n",total}' 1.txt
printf:print 指定输出数计算
printf:可以输出计算后的结果 指定格式 %.2f %d
%.2f:指小数点后两位计算
%d: 指整数计算
awk 'BEGIN {wg[0]="boyuan";wg[1]="apeng";wg[2]="haha";for (i in wg)print wg[i]}'
统计wg下的元素
awk 'BEGIN {wg[0]="boyuan";wg[1]="apeng";wg[2]="haha";for (i in wg)print i}'
统计wg下的下标
awk '{ip[$1]++} END {for (i in ip) print i,ip[i]}' 1605Aacces.log
可以统计一个ip出现的次数
################################### awk属性 #####################################
属性 说明
$0 当前记录(作为单个变量)
$1~$n 当前记录的第n个字段,字段间由FS分隔
FS 输入字段分隔符 默认是空格
NF 当前记录中的字段个数,就是有多少列
NR 已经读出的记录数,就是行号,从1开始
RS 输入的记录他隔符默 认为换行符
OFS 输出字段分隔符 默认也是空格
ORS 输出的记录分隔符,默认为换行符
ARGC 命令行参数个数
ARGV 命令行参数数组
FILENAME 当前输入文件的名字
IGNORECASE 如果为真,则进行忽略大小写的匹配
ARGIND 当前被处理文件的ARGV标志符
CONVFMT 数字转换格式 %.6g
ENVIRON UNIX环境变量
ERRNO UNIX系统错误消息
FIELDWIDTHS 输入字段宽度的空白分隔字符串
FNR 当前记录数
OFMT 数字的输出格式 %.6g
RSTART 被匹配函数匹配的字符串首
RLENGTH 被匹配函数匹配的字符串长度
SUBSEP \034