awk

来源:互联网 发布:淘宝加盟合同 编辑:程序博客网 时间:2024/06/03 20:05

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/passwd1) 搜索支持正则,例如找root开头的    awk -F: /^root/ /etc/passwd2) 搜索/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/passwd2) 使用printf替代print,可以让代码更加简洁,易读awk  -F :  {printf("filename:%10s,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/passwd2) 有初始化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/passwd3) 统计某个文件夹下的文件占用的字节数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"&&$2=="19"&&$3>="10:40:00"&&$3<="11:10:00"){print $0;}}

2.测试时间

time cat messages-20160626 | head -1000000 |  awk /statement/ | wc -l    real    0m8.548s    user    0m6.796s    sys 0m1.760stime cat messages-20160626 | head -1000000 |  grep "statement"  | wc -l    real    0m1.192s    user    0m0.986s    sys 0m0.782s

3.筛选

cat 0619 | grep "NO LOAD BALANCE" | awk  -F from {print $2} | awk -F ( {print $1} | sort  | uniq -c | sort -rn | head

4.文本行去重并按重复次数排序

cat 0716 | sort  | uniq -c | sort -rn | head

1.取主叫 被叫

cat freeswitch.log | grep "eae673d6-9660-11e6-b550-f7a86d9bba94" | grep \[NOTICE\]|\[INFO\] |grep Processing | sed s/^.*Processing //g | sed s/in .*//g

2.取拨号时间

cat freeswitch.log | grep "eae673d6-9660-11e6-b550-f7a86d9bba94" | grep \[NOTICE\]|\[INFO\] | grep \[NOTICE\] | head -1 | awk {print $2,$3}

3.终止时间

cat freeswitch.log | grep "eae673d6-9660-11e6-b550-f7a86d9bba94" | grep \[NOTICE\]|\[INFO\] | grep \[NOTICE\] | tail -1 | awk {print $2,$3}

2.原因

cat /var/log/freeswitch/freeswitch.log| grep INFO | grep df2f2282-a6e5-11e6-82ca-f7a86d9bba94 | tail -1cat /var/log/freeswitch/freeswitch.log| grep INFO | grep 47f3ed9a-b846-11e6-a58c-f7a86d9bba94
1 0
原创粉丝点击