awk 知识点

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 t1
12 bbbbbbbbbbb
13 ccccccccccc
14 aaaaaaaaaaa
15 bbbbbbbbbbb
16 ccccccccccc

awk 'BEGIN{print "line:13--15";}NR==13,NR==15{print $0}' t1   
line:13--15
ccccccccccc
aaaaaaaaaaa
bbbbbbbbbbb

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 tt
cn1.test.ck3
cn2.test.ck3
cn3.test.ck3
cn4.test.ck3
cn5.test.ck3
cn6.test.ck3
cn7.test.ck3
cn1.test.ck6
cn2.test.ck6
cn3.test.ck6
cn4.test.ck6
cn5.test.ck6
cn6.test.ck6
cn7.test.ck6

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

(2). 模式中只要是正则表达式就必须用  //来表示:而且可以有多个条件
awk -F'.' '/^(cn|so)/ && $1 ~/cn[0-4]/ && $3 ~/[358]$/{print $0}' tt 
cn1.test.ck3
cn2.test.ck3
cn3.test.ck3
cn4.test.ck3

(3). 模式是关系表达式
cat ttt
10:20:30:40:50:60
5:15:25:35:45:55
2:12:22:32:42:52
8:18:28:38:48:58

(4). 第一个域 能被 5整除,会打印此行的第三个于 + 12  和 第5个域 + 14 的值
awk -F':' '$1 % 5 == 0{print $3 + 12,$5+14}' ttt 
42 64
37 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-61
5-15-25.000000-35-56




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值