gawk用法

gawk 
1.    字段和记录分隔符变量
    
变量 描述
FIELDWIDTHS 以空格分隔的数字列表,用空格定义每个数据字段的精确宽度
FS 输入字段分隔符号
RS 输入记录分隔符号
OFS 输出字段分隔符号
ORS 输出记录分隔符号
 2.    gawk 'BEGIN{FS=",";OFS="-"}{print $1,$2,$3}' data1   //是将读取的数据以“,”为分隔符读取,以“-”作为分隔符进行显示
3.    gawk 'BEGIN{FIELDWIDTHS="3 5 2 5 "}{print $1,$2,$3,$4}'  data1   //数字字符串由定义的宽度分隔并显示
        例如:1005.3247596.37 输出为:100    5.324    75    96.37
4.    gawk 'BEGIN{FS="\n";RS=""}{print $1,$4}' data1  //RS是将空行作为记录分隔符,FS是将换行符作为一个字段分隔符
5.    注意字段为gawt处理的列,记录为gawt处理的行
6.    gawk内置变量
变量 描述
ARGC 出现的命令行参数的个数
ARGIND 当前正在处理的文件在ARGV中的索引
ARGV 命令行参数数组
CONVFMT 数字的转换格式。默认值为%.6g
ENVIRON 当前shell环境变量及其值的关联数组
ERRON 当读取或关闭输入文件时发生错误的系统错误
FILENAME 用于输入到gawt程序的数据文件的文件名
FNR 数据文件的当前记录号
IGNORECASE 如果设置为0,则忽略gawt命令中使用的字符串的大小写
NF 数据文件中数据字段的个数
NR 已处理的输入记录的个数
OFNT 显示数字的输出格式,默认为%.6g
RLENGTH 匹配函数中匹配上的字符串的长度
RSTART 匹配函数中匹配上的子字符串的开始索引
7.    gawk 'BEGIN {print ARGC,ARGV[1]}' data1 //ARGC表示命令行有两个参数;ARGV[1]表示值:data1
8.    gawk 'BEGIN{print ENVIRON["HOME"];print ENVIRON["PATH"]}' //查看环境变量值
9.    gawk 'BEGIN{FS=":";OFS=":"}{print $1,$NF}' /etc/passwd   //输入以“:”分隔输出以":"分隔;NF是指字段个数
10.    gawk 'BEGIN{FS=","};{print $1,"FNR="FNR,"NR="NR};END{print "There were ",NR,"records processed"}' data1 data1 //FNR本身是对单个文件记录,而NR则是对处理的数据进行的记录
11.    gawk 'BEGIN{x=4;x=x*2+3;print x}'
12.    gawk 'BEGIN{test="name";print test}'
13.    命令行中赋值变量
    在script中
        BEGIN{FS=","}
        {print $n}
        $gawk -f script n=2 data1
        $gawk -v n=2  -f script data1//在BEGIN之前对n进行赋值
14.    使用数组
    $gawk 'BEGIN{
    >var["a"]=1
    >var["g"]=2//定义数组变量
    >for (test in var)//在数组中递归
    >{
    >    print "Index:",test,"- Value:",var[test]
    >}
    >delete var["g"]//删除数组变量
    >print "-----"
    >for (test in var)
    >{
    >    print "Index:",test,"- Value:",var[test]
    >}
    >}'
15.    使用模式
        波浪号(~)作为匹配操作符,操作例如:$1 ~ /^data/
    $gawk 'BEGIN {FS=","}$2 ~ /^data/{print $0}' data1 //模式匹配在第二列并打印全行 
    $gawk -F: '$1 ~ /rish/{print $1,$NF}' /etc/passwd //以:为分隔符在第一列匹配
        否定正则表达式例如: $1 ~ /expression/
    $gawk 'BEGIN{FS=","}$2 ! ~ /^data/{print $1}' data1
16.    数学表达式的使用
    数学表达式形式:
        x==y
        x<=y
        x<y
        x>=y
        x>y
    $gawk -F: '$4 == 0 {print $1}'/etc/passwd
    此形式还可以用于文本数据不过要注意的是数据必须与模式精确匹配
    $gawk -F: '$1 == "data"{print $1}' data1
17.    结构化语言
   (1) if语句:
        一种形式:
        
        第二种形式:
            格式:if {condition}statement; else statement2
        $gawk 'BEGIN{if($1 > 20)print $1*2; else print $1 / 2}' data4
   (2) while语句在语句内部可以使用break和continue
        $gawk 'BEGIN{
        >total =0;
        >i=1
        >while (i<4)
        >{
        >    total +=$1
        >    if(i==2)
        >        break
        >    i++
        >}
        >avg=total / 2
        >print "the average od the first two data elements is :",avg
        >}' data5
    (3)do-while 语句
        格式:
            do
            {
                statements
            }while (condition)
        例如:
        $gawk '{
        >i=1
        >do
        >{
        >    i++;
        >}while(i<29)
        >print i}' 
    (4)for 语句
        $gawk 'BEGIN{
        >total =0
        >for (i=0;i<4;i++)
        >{
        >    total+=$i
        >}
        >avg=total/3
        >print "average:",avg
        >}' data5
18.    格式化打印//类似C语言
        printf "format string",var1,var2.....
19.    gawk可以利用C语言的标准数学函数
        并且还提供数据的位操作处理
        and(v1,v2):执行v1和v2的与操作
        compl(val):执行对val的补位
        lshift(val,count):将值val向左移动count位
        or(v1,v2):执行v1和v2的或操作
        rshift(val,count):将值val向右移动count位
        xor(v1,v2):执行v1和v2的异或操作
    
20.    字符串函数
        



21.    时间函数
        
22.    gawk定义函数
    函数一般类型:
        function name([variables])
        {
            statements;
        }
    例如:
    $gawk '
    >function myprint()
    >{
    >    printf "%-16-%s\n",$1,$4
    >}
    >BEGIN{FS="\n";RS=""}
    >{
    >    myprint()
    >}' data2
23.    创建函数库
        
        操作:
        







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值