awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
awk有三个不同的版本:awk、nawk和gawk,未作特别说明,一般指gawk,gawk是awk的GNU版本。
之所以叫awk是因为其取了三位创始人Alfred Aho,Peter Weinberger,和Brian Kernighan的Family Name
的首字符。
使用方法:
awk'{pattern+action}'{filenames}
尽管 *** 作可能会很复杂,但语法总是这样,其中pattern表示awk在数据中查找的内容,而action是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。pattern就是要表示的正则表达式,用斜杠括起来。
awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本 *** 作。完整的awk脚本通常用来格式化文本文件中的信息。
通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。
调用awk的三种方式
1、命令行方式
awk[-F field-separator]'commands'input-file(s)
其中,commands是真正awk命令,[-F域分隔符]是可选的。input-file(s)是待处理的文件。
在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。
2、shell脚本方式
将所有的awk命令插入一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,一遍通过键入脚本名称来调用。
相当于shell脚本首行的:#!/bin/sh
可以换成:#!/bin/awk
3、将所有的awk命令插入一个单独文件,然后调用:
awk-f awk-script-file input-file(s)
其中,-f选项加载awk-script-file中的awk脚本,input-file(s)跟上面的是一样的。
获取1txt中第二行第三列的数据,输出到2txt。
# cat 1txt
1 2 3
4 5 6
7 8 9
# cat 1txt|awk 'NR==2{print $3}' > 2txt
# cat 2txt
6
如果是第n行
awk 'FNR==n{print}' InputFile
将 n 替换成你要的行数
如果是 n 到 m行
awk 'FNR>=n && FNR <=m{print}' InputFile
1、打开一个文件,如下图所示。
2、然后点击右下角的行,列,如下图所示。
3、接下来会d出一个界面,如下图所示。
4、我们直接输入数字就可以了,如下图所示。
5、接着光标就跳转到指定的数字行了。
6、最后底下也变了,如下图所示。
1直接重定向写入文件:
awk '1' infile >outfile
2通过管道,将输出传递给其它命令作为输入:
awk '1' infile |wc -l
3使用命令替换,直接获取其输出保存在变量中:
var=$(awk '1' infile) 或 var=`awk '1' infile`
}’ $执行结果如下:[root@myfreelinux pub]# bash analyseawk first-arg second-argawkfirst-argsecond-arg解释说明:ARGC,ARGV[ ]是awk的内建变量。ARGC :是一整数,代表命令行上除了选项-v, -f 及其对应的参数之外所有参数的个数。ARGV[ ] 是一字符串数组,ARGV[0],ARGV[1],。。。ARGV[ARGC-1]分别代表命令行上相对应的参数。比如在这里执行的命令[root@myfreelinux pub]# bash analyseawk first-arg second-arg,ARGC的值是3,ARGV[0]是awk,ARGV[1]的值为first-arg, ARGV[2]的值是second-arg。再比如#awk -vx=21-f program fir-data sec-data和#awk ‘{ print $1 ,$2 }’fir-data sec-data这两条ARGC 值都是3,ARGV[0]是awk,ARGV[1]是fir-data,ARGV[2]是sec-data,命令行上的-f program, -vx=21″,程序部分’{ print $1, $2}’ 都不会被列入ARGC和ARGV[ ]中。awk 利用ARGC 来判断要打开的数据文件的个数,但是用户可以强行更改ARGC的值;比如将ARGC的值被用户设置为1,那么awk将被蒙骗,误以为命令行上没有数据文件文件, 所以不会以ARGV[1],ARGV[2]等作为文件名来打开文件并读取数据;但是在程序中可以使用ARGV[1],ARGV[2]等变量来取得命令行上数据文件的数据。现在有一个awk程序内容如下:[root@myfreelinux pub]# cat test1awk#!/bin/awk -fBEGIN{for(i=0;i<ARGC;i++)print ARGV[i];}执行以上程序的结果如下:[root@myfreelinux pub]# awk -f test1awk arrivedat today_result1awkarrivedattoday_result1加入将test1awk的内容更改成test2awk的内容如下:[root@myfreelinux pub]# cat test2awk#!/bin/awk -fBEGIN{number=ARGC;#用number 记住实际的参数个数ARGC=2;#设置ARGC=2,awk将以为只有一个资料文件for(i=0;i<ARGC;i++)print ARGV[i];}执行并查看运行结果:[root@myfreelinux pub]# awk -f test2awk arrivedat today_result1 today_result2awkarrivedat这个时候会发现,虽然同样ARGC=3,但是人为的设置ARGC=2,后,awk在执行的时候,只认为有一个参数arrivedat。将test2awk修改成以下内容:[root@myfreelinux pub]# cat test3awk#!/bin/awk -fBEGIN{number=ARGC;ARGC=2;for(i=0;i<ARGC;i++)print ARGV[i];for(i=ARGC;i<number;i++)print ARGV[i];}运行并查看运行结果如下:显然,通过修改ARGC可以修改awk能够识别的参数的个数,但是实际存在的ARGV的内容,仍然可以访问的。
以上就是关于linux里awk是做什么的,请详细说明全部的内容,包括:linux里awk是做什么的,请详细说明、利用awk调取文件的特定行、awk怎么从文本文件读取某一段文本等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)