awk 知识点

来源:互联网 发布:专升本c语言考试大纲 编辑:程序博客网 时间:2024/05/21 09:38

AWK的知识点积累

shell 脚本向awk 传递参数

1. shell 脚本中向awk 命令传递参数的简单例子:

num=$1  awk -F',' 'BEGIN{          for(i = 0; i < awk_num; i++)          {              a[i] = 0;          }      }      {         for(i = 0; i < awk_num; i++)          {              if($3%awk_num == i)              {                  a[i]++;              }          }      }      END{         for(i = 0; i < awk_num; i++)          {              print i, "=", a[i];          }      }' awk_num=$num test.txt本例中将shell中的变量num值传递给awk的awk_num变量


2. 简单的命令:

line_tmp=`expr 2 \* $line - 1`      host_name=`cat $1|awk 'BGEIN{OFS="\t"}NR==awk_num,NR==(awk_num+1){print $1}' awk_num=$line_tmp`      echo "$host_name" >>  /home/zengtai.csm/.tmp/.check/result.txt


2. awk 打印指定行

  1. 打印 12--15行:

cat t112 bbbbbbbbbbb13 ccccccccccc14 aaaaaaaaaaa15 bbbbbbbbbbb16 cccccccccccawk 'BEGIN{print "line:13--15";}NR==13,NR==15{print $0}' t1   line:13--15cccccccccccaaaaaaaaaaabbbbbbbbbbb

3. awk printf()格式:

echo $1|awk -F"-" '{printf("%s-%s-%s %s:%s",$1,$2,$3,$4,$5)}'`

4. awk 的数组、循环

awk -F[\ :] '{s[$2]++}END{for(i in s){print i,s[i]}}'  test.log2012-05-24 | sort -n

以 :冒号为间隔符,以文档第二个域作为数据的下标来统计第二个域进行分类并进行统计每一类出现的数量;最后再按大小进行排序输出

5. awk 正则表达式

cat ttcn1.test.ck3cn2.test.ck3cn3.test.ck3cn4.test.ck3cn5.test.ck3cn6.test.ck3cn7.test.ck3cn1.test.ck6cn2.test.ck6cn3.test.ck6cn4.test.ck6cn5.test.ck6cn6.test.ck6cn7.test.ck6

(1). 其中一个于满足几个条件

第一个域匹配正则表达式cn[0-3]   而且第三个域满足 ck[358] 结尾的打印出来
awk -F'.' '$1 ~/cn[0-3]/ && $3 ~/ck[348]$/{print $0}' tt   ----> 正则表达式 与 输出正文 { }  之间没有 空格cn1.test.ck3cn2.test.ck3cn3.test.ck3

(2). 模式中只要是正则表达式就必须用  //来表示:而且可以有多个条件

awk -F'.' '/^(cn|so)/ && $1 ~/cn[0-4]/ && $3 ~/[358]$/{print $0}' tt cn1.test.ck3cn2.test.ck3cn3.test.ck3cn4.test.ck3

(3). 模式是关系表达式

cat ttt10:20:30:40:50:605:15:25:35:45:552:12:22:32:42:528:18:28:38:48:58

(4). 第一个域 能被 5整除,会打印此行的第三个于 + 12  和 第5个域 + 14 的值

awk -F':' '$1 % 5 == 0{print $3 + 12,$5+14}' ttt 42 6437 59

(5). awk 自定义输出格式

 awk -F':' '$1 % 5 ==0{printf("%s-%s-%f-%d-%d\n",$1,$2,$3,$4,$5+11)}' ttt 10-20-30.000000-40-615-15-25.000000-35-56




原创粉丝点击