博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
22、awk编程
阅读量:5867 次
发布时间:2019-06-19

本文共 2552 字,大约阅读时间需要 8 分钟。

1、BEGIN模块通常用来改变内建变量的值,如 OFS,RSFS等,以及打印标题。如:

awk 'BEGIN{FS=" ";OFS="\t";ORS="\n"}{print $1,$2,$3}' file //输入域分隔符为空格,输出域分隔符为tab,记录分隔符为\n

$awk 'BEGIN{print "TITLE TEST"}

2、END在整个输入文件处理完成后被执行。如

$awk 'END{print "The number of records is" NR}' test  //打印被处理的记录数

3、重定向

awk '$1==100{print $1 > "out"}' test.cpp

4、管道

1)awk 'BEGIN{"date" | getline d; print d}' test.cpp //执行linuxdate命令,并通过管道输出给getline,然后再把输出赋值给自定义变量d,并打印它。

getline从标准输入、管道或者当前正在处理的文件之外的其他输入文件获得输入。它负责从输入获得下一行的内容,并给NF,NRFNR等内建变量赋值。如果得到一条记录,getline函数返回1,如果到达文件的末尾就返回0,如果出现错误,例如打开文件失败,就返回-1

2)awk 'BEGIN{"date" | getline d;split(d,mon); print mon[2]}' //split函数把变量d转化成数组mon,然后打印数组mon的第二个元素

3)awk 'BEGIN{while("ls"|getline)print}'

    循环使getlinels的输出中读取一行,并把它打印到屏幕。这里没有输入文件,因为BEGIN块在打开输入文件前执行,所以可以忽略输入文件。

4)awk 'BEGIN{printf "what is you name?"; getline name < "/dev/tty"}$1~name{print "Found " name on line ","NR"."}' file

5)awk 'BEGIN{while (getline < "/etc/passwd" > 0) lc++; print lc}'

6)可以在awk中打开一个管道,且同一时刻只能有一个管道存在。通过close()可关闭管道。如:$ awk '{print $1, $2 | "sort" }' test END {close("sort")}awkprint语句的输出通过管道作为linux命令sort的输入,END块执行关闭管道操作。

system函数可以在awk中执行linux的命令。

awk 'BEGIN{system("clear")}'

    fflush函数用以刷新输出缓冲区,如果没有参数,就刷新标准输出的缓冲区,如果以空字符串为参数,如fflush(""),则刷新所有文件和管道的输出缓冲区。

5awk '{i=1;while(i<=NF){print NF,$1;i++}}' file

    next语句从输入文件中读取一行,然后从头开始执行awk脚本

    exit语句用于结束awk程序,但不会略过END块。退出状态为0代表成功,非零值表示出错

6数组

1)用变量作为数组下标。如:$ awk '{name[x++]=$2};END{for(i=0;i<NR;i++) print i,name[i]}' test

输出数组中元素:

{

for (item in arrayname)

{

print arrayname[item]

}

}

    delete函数用于删除数组元素。如:$ awk '{line[x++]=$1} END{for(x in line) delete(line[x])}' test

7、内建函数

1)sub函数匹配记录中最大、最靠左边的子字符串的正则表达式,并用替换字符串替换这些字符串。只替换一次。

sub (regular expression, substitution string):

sub (regular expression, substitution string, target string)

awk '{ sub(/test/, "mytest"); print }' testfile

2)gsub替换所有。

3)index函数返回子字符串第一次被匹配的位置,偏移量从位置1开始。

index(string, substring)

awk '{print index("socket.h","ck")}' file

4)length函数返回记录的字符数

5)子字符串

substr( string, starting position )

substr( string, starting position, length of string )

6)touppertolower函数可用于字符串大小间的转换,该功能只在gawk中有效

7)split按给定的分隔符把字符串分割为一个数组。如果分隔符没提供,则按当前FS值进行分割。格式如下:

split( string, array, field separator )

split( string, array )

awk '{ split( "20:18:00", time, ":" ); print time[2] }'

awk '{if (NF==6){split($5,a,"/");if (a[1]>=a[2])print $0}}' *

8)时间函数systime

9)数学函数sin[1]

10)自定义函数

function name ( parameter, parameter, … )

{

statements

return expression     # the return statement and expression are optional

}

8、默认print $0

9、变量不需要定义就可以直接使用,变量类型可以是数字或字符串。

10、字符串一定要用双引号。

1

2

【3】 

转载地址:http://scnnx.baihongyu.com/

你可能感兴趣的文章
Maven_真的需要吗?
查看>>
AD中设置PCB线间距
查看>>
【转载】 Introduction to Deep Learning Algorithms
查看>>
【转载】支持向量机(五)SMO算法
查看>>
动态规划——Maximum Sum of 3 Non-Overlapping Subarrays
查看>>
dispatch_release崩溃
查看>>
构造第二章
查看>>
小组虚拟机与全套镜像安装
查看>>
配置pip国内阿里巴巴镜像
查看>>
RabbitMQ 常用命令
查看>>
初认 Egon
查看>>
03-JS中添加节点
查看>>
discuze路由和模板引擎小记
查看>>
Linux软件安装常用方法(转载)
查看>>
9.14 星际旅行题解
查看>>
The method format(String, Object[]) in the type String is not applicable for the arguments
查看>>
Struts的Action类
查看>>
Day1-dns Extension
查看>>
3304 水果姐逛水果街Ⅰ
查看>>
(9)Linux的哲学思想及文件概念
查看>>