awk编程

awk是Linux 系统下的一个强大的文本处理工具,常常和sed、grep一起配合使用。主要功能就是将文本依行读取,然后每行按照一定的分隔符隔开放进一个array里面并提供了函数对这些元素进行一定的处理分析。在awk中,文件的每一行由域分隔符分开,每一项称为一个域。在不指明-F域分隔符的情况下,默认的域分隔符是空格。

三种方式调用awk

  1. 命令行方式
    $ awk [-F field-separator] 'commands' input-file(s)
    其中,commands 是真正awk命令,[-F域分隔符]是可选的。 input-file(s) 是待处理的文件。

  2. shell脚本方式
    将所有的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)跟上面的是一样的。

awk内置变量

awk有许多内置变量用来设置环境信息,这些变量可以被改变,下面给出了最常用的一些变量。

环境变量解释
ARGC命令行参数个数
ARGV命令行参数排列
ENVIRON支持队列中系统环境变量的使用
FILENAMEawk浏览的文件名
FNR浏览文件的记录数
FS设置输入域分隔符,等价于命令行 -F选项
NF浏览记录的域的个数
NR已读的记录数
OFS输出域分隔符
ORS输出记录分隔符
RS控制记录分隔符

此外, $1变量是指整条记录,$1表示当前行的第一个域,$2表示当前行的第二个域,……以此类推。

awk编程

关于awk的编程,其基本语法如下:

awk  -F ':'  'BEGIN '{pattern + action}'  '{pattern + action}' END '{pattern + action}'' {input-filenames}

awk工作流程是这样的:先执行BEGING,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录······直到所有的记录都读完,最后执行END操作。除了awk的内置变量,awk还可以自定义变量。
下面累加 number.txt 的总和为例:

$ cat number.txt
1
2
3
4
5
6
7
7
8
8
8
9
3
2
5
7
8
9
3
5
3

$ awk 'BEGIN {print "Start counting"} {sum+=$0;} END {print "Sum is ", sum}' number.txt

Start counting
user count is  40

sum是自定义变量,之前的action{}里都是只有一个print,其实print只是一个语句,而action{}可以有多个语句,以;号隔开。

更多用法可以参见官网:
http://www.gnu.org/software/gawk/manual/gawk.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值