awk java_awk内置变量和查数据常用例子

一、awk内置变量表

属性说明

$0当前记录(作为单个变量)

$1~$n当前记录的第n个字段,字段间由FS分隔

FS输入字段分隔符默认是空格

NF当前记录中的字段个数,就是有多少列

NR已经读出的记录数,就是行号,从1开始

RS输入的记录他隔符默认为换行符

OFS输出字段分隔符默认也是空格

ORS输出的记录分隔符,默认为换行符

ARGC命令行参数个数

ARGV命令行参数数组

FILENAME当前输入文件的名字

IGNORECASE如果为真,则进行忽略大小写的匹配

ARGIND当前被处理文件的ARGV标志符

CONVFMT数字转换格式%.6g

ENVIRONUNIX环境变量

ERRNOUNIX系统错误消息

FIELDWIDTHS输入字段宽度的空白分隔字符串

FNR当前记录数

OFMT数字的输出格式%.6g

RSTART被匹配函数匹配的字符串首

RLENGTH被匹配函数匹配的字符串长度

SUBSEP\034

二、查数据常用

1.求和:awk -F\| '{total=$1+total;} END {print total;}' tmp.log

2.求平均awk -F\| '{sum+=$5} END {print "Average = ", sum/NR}' tmp.log

3.求最大值awk 'BEGIN {max = 0} {if ($1>max) max=$1 fi} END {print "Max=", max}'

4.求最小值(min的初始值设置一个超大数即可)awk 'BEGIN {min = 1999999} {if ($1

5.求区间seq 60|awk '$0>20&&$0<25{print $0}'

6.ENDawk -F\# '{if($5=="USE")a++}END{print a}'

7.显示时间awk -F\| '{OFS="|";$2=strftime("%Y-%m-%d %H:%M:%S",$2/1000);print $0}'

8.从一天的数据里面查询某个小时的数据awk -F\| '{Hour=strftime("%H",substr($7,0,10));print Hour}'

awk -F\| '{Hour=strftime("%H",$1);if(Hour=="12")print $0}' Bill.log

awk -F\| '$2==666{Hour=strftime("%H",substr($7,0,10));if(Hour=="09")print $0}' |sort -t\| -k7 -n

9.打印mapawk -F: '{a[$1]++}END{for (i in a) print i"|"a[i]}' tmp.log

10.按某行排序cat UserBill_35080|sort -t\| -k3 -nr

cat UserBill_35080|sort -t\| -k3 -n

11.时间段while [[ $StatDay -le $EndDay ]]

do

StatDay=`date -d"+1 day $StatDay" +"%Y%m%d"`

get10093 ${StatDay}

done

12.求b文件里面userID在a文件里面awk -F\| 'NR==FNR{a[$3]=0;}NR>FNR{if($3 in a) print $0 }' a b

awk -F\| 'NR==FNR{a[$0]=0}NR>FNR{if($1 in a){b[$2]++}}END{for(i in b)print i,b[i]}' a b

13.按位数将时间戳转换为时间#!/bin/sh

Col=$1

awk -F\| -v Col=$Col -v OFS="|" '{a=strftime("%Y-%m-%d %H:%M:%S",$Col/1000); print a,$0}'

14.输出到文件里面awk -F\| 'OFS="|" {a[$4]=$5} END {for(i in a){if(a[i]>=10){print i,a[i]>"b"}else print i,a[i]>"c"}}' a.log

15.统计个数,按照多个分隔符分割-F "[#|]"

awk -F "[:.]" '{a[$3]++} END {for(i in a)print i"|"a[i]}' a

16.awk分隔函数split

cat ${tmp}|awk -F\| '{a[$4]=$9"|"$14"|"$16"|"$18} END {for(i in a){split(a[i],strs,"|");print i"|"strs[1]"|"strs[2]"|"strs[3]"|"strs[4]}}'

17.awk使用getlinea=/data/a

b=/data/b

result=/data/result

awk -F\| -v a=${a} -v b=${b} 'BEGIN{

while(getline0){

User[$1]=$2"_"$3

}

for(i in User){

split(i,strs,"_");

name=strs[1];

age=strs[2];

printf(%s %s %s\n",id,name,age);

}

}'>${result}

18.awk输出不使用科学计数法

1、awk在默认情况下会将较大的值打印科学计数值

如:echo |awk '{print 1806293*0.9}' 结果为 1.62566e+06

2、如果要获得完整的数值,可以使用printf,使用方法和C语言一致

如:echo |awk '{printf("%d %d\n",1806293*0.9,465456456)}'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值