-n ''3,$p'' |awk ''BEGIN{sum=0}{sum =NF}END{print sum}''
16.统计文件大小的shell
ls -l $* | awk ''
BEGIN { print "BYTES", "t", "FILE" }
{ sum = $5
filenum
print $5, "t", $9
}
END { print "Total: ", sum, "bytes (" filenum " files)" }''
17.awk(基础)
====================================================
1.抽取域
awk -F: ''{print $1}'' /etc/passwd
2.保存输出
awk -F: ''{print $1}'' /etc/passwd | tee user 使用tee命令,在输出文件的同时,输出到屏幕
使用标准输出
awk -F: ''{print $1}'' /etc/passwd >user3
4.打印所有记录
awk -F: ''{print $0}'' /etc/passwd
5.打印单独记录
awk -F: ''{print $1,$4}'' /etc/passwd
6.打印报告头
awk -F: ''BEGIN {print "NAMEn"} {print $1}'' /etc/passwd
7.打印结尾
awk -F: ''{print $1} END {print "this is all users"}'' /etc/passwd
条件操作符
1.匹配
awk -F: ''{if($1~/root/) print }'' /etc/passwd //{if($1~/root/) print}表示如果field1包含root,打印它
2.精确匹配
使用等号 ==
awk -F: ''{if($3=="0") print }'' /etc/passwd
3.不匹配
!~
awk -F: ''{if($1!~/linuxtone/) print }'' /etc/passwd
!=
精确不匹配
awk -F: ''{if($1!="linuxtone") print }'' /etc/passwd
4.小于
<
5.小于等于
<=
6.大于
>
.........
7.设置大小写
awk ''/[Rr]oot/'' /etc/passwd
8.任意字符
awk -F: ''{if($1~/^...t/) print}'' /etc/passwd //^...t表示第四个字幕是t
9.或关系匹配
awk -F: ''{if ($1~/(squid|nagios)/) print}'' /etc/passwd
10.行首
awk ''/^root/'' /etc/passwd // ^root(行首包含root)
11.AND &&
awk -F: ''{if($1=="root" && $3=="0") print}'' /etc/passwd
12.OR ||
内置变量:
ARCC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FNR 浏览文件的记录数
FS 置顶分隔符,等价于-F
NF 浏览记录的域的个数
NR 已读的记录数
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符
打印有多少行记录
awk ''END {print NR}'' /etc/passwd
设置输入域到变量名
awk -F: ''{name=$1; path=$7; if(name~/root/) print name "tpath is:" path}'' /etc/passwd
域值比较操作
awk ''{if($6<$7) print $0}'' input-file
修改文本域只显示修改改记录
awk -F: ''{if($1=="nagios") {$1="nagios server" ; print }}'' /etc/passwd
文件长度相加
ls -l|awk ''/^[^d]/ {print $9"t" $5} {tot =$5} END {print "total kb:"tot}''
内置的字符窜函数
gsub(r,s) 在整个$0中用s替代r
gsub(r,s,t) 在整个t中用s替代r
index( |