db_search 1078.TrPriceBill | sed 1d | sed s/,/ /g | awk $2## 20151001 | sed s/ /,/g | head
sed 1d: 删除第一列
sed s/,/ /g: 把,替换为空格(awk以空格分隔)
awk $2## 20151001: 判断第二列是否满足这个条件
入门实例
1.显示最近登录的5个帐号
last -n 5 <==仅取出前五行
last -n 5 | awk {print $1}
1) $0则表示所有域,$1表示第一个域,$n表示第n个域
2) 默认域分隔符是"空白键" 或 "[tab]键"
2.指定域分隔符为
cat /etc/passwd |awk -F : {print $1}
3.只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以tab键分割
cat /etc/passwd |awk -F : {print $1"\t"$7}
4.在最后一行添加”blue,/bin/nosh”
cat /etc/passwd |awk -F : BEGIN {print "name,shell"} {print $1","$7} END {print "blue,/bin/nosh"}
5.搜索/etc/passwd有root关键字的所有行
awk -F: /root/ /etc/passwd
1) 搜索支持正则,例如找root开头的
awk -F: /^root/ /etc/passwd
2) 搜索/etc/passwd有root关键字的所有行,并显示对应的shell
awk -F: /root/{print $7} /etc/passwd
6.awk内置变量
1) 统计/etc/passwd:文件名,每行的行号,每行的列数,对应的完整行内容:
awk -F : {print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0} /etc/passwd
2) 使用printf替代print,可以让代码更加简洁,易读
awk -F : {printf("filename:s,linenumber:%s,columns:%s,linecontent:%s\n",FILENAME,NR,NF,$0)} /etc/passwd
7.自定义变量
1) 统计/etc/passwd的账户人数
awk {count ;print $0;} END{print "user count is ", count} /etc/passwd
2) 有初始化count,虽然默认是0,但是妥当的做法还是初始化为0:
awk BEGIN {count=0;print "[start]user count is ", count} {count=count 1;print $0;} END{print "[end]user count is ", count} /etc/passwd
3) 统计某个文件夹下的文件占用的字节数
ls -l |awk BEGIN {size=0;} {size=size $5;} END{print "[end]size is ", size}
4) 如果以M为单位显示:
ls -l |awk BEGIN {size=0;} {size=size $5;} END{print "[end]size is ", size/1024/1024,"M"}
5) 统计某个文件夹下的文件占用的字节数,过滤4096大小的文件(一般都是文件夹):
ls -l |awk BEGIN {size=0;print "[start]size is ", size} {if($5!=4096){size=size $5;}} END{print "[end]size is ", size/1024/1024,"M"}
8.for循环遍历数组
awk -F : BEGIN {count=0;} {name[count] = $1;count ;}; END{for (i = 0; i < NR; i ) print i, name[i]} /etc/passwd
实际使用
1.过滤字符
cat messages-20160626 | head | awk /statement/ {if($1=="Jun"