第四章 sed命令和awk编程(下)

目录

awk 编程

awk编程模型

awk 调用方法

awk 编程的一组例子

awk模式匹配

记录和域

关系和布尔运算符

表达式

系统变量

格式化输出

内置字符串函数

向awk脚本传递参数

条件语句和循环语句

数组


awk 编程

awk编程模型


awk 调用方法


awk 编程的一组例子

awk模式匹配

下面是awk打印空白行的几种模式:(sed 修改和编辑文本文件中某些行,awk 是访问文本文件,操纵文本文件中某些数据)

  1. 命令调用: awk ‘/^$/{print “This is a blank line.”}’ input

  2. 插入脚本文件:

  1. 脚本文件:

脚本文件中,#!/bin/awk 指明awk路径, -f 指明是文本调用,后面的可以看做是命令调用中单引号中的内容。


记录和域

awk默认的分隔符是空格,此时Tab键被看做是连续的空格键来处理,我们可以使用awk的-F选项来改变分隔符:上面的第二个分隔符是Tab,我们换为Tab看看结果

此时的$3变为了号码列。

另一种改变分隔符的方法是使用awk环境变量FS,我们可以通过在BEGIN字段中设置FS的值来改变分隔符。

例如:源文件如下


关系和布尔运算符

~ : 正则匹配

if 、if /else、if/else else三种条件语句:if 条件需要用圆括号括起来。

注:使用 == 来精确匹配,使用 ~ 来模糊匹配是否含有指定字符串。


表达式


系统变量

格式化输出

格式控制符分为awk修饰符和格式符两种:

awk 的printf参照C语言的printf,基本语法为:

printf (格式控制符,参数)


内置字符串函数


向awk脚本传递参数


条件语句和循环语句

像C语言一样:

例子:

if (expression) {

    statement;

    statement;

    ... ...

}


if (expression) {

    statement;

} else {

    statement2;

}


if (expression) {

    statement1;

} else if (expression1) {

    statement2;

} else {

    statement3;

}

统计某个文件夹下的文件占用的字节数,过滤4096大小的文件(一般都是文件夹):

ls -l |awk 'BEGIN {size=0;print "[start]size is ", size} {if($5!=4096){size=size+$5;}} END{print "[end]size is ", size/1024/1024,"M"}'
[end]size is  8.22339 M


数组

因为awk中数组的下标可以是数字和字母,数组的下标通常被称为关键字(key)。值和关键字都存储在内部的一张针对key/value应用hash的表格里。由于hash不是顺序存储,因此在显示数组内容时会发现,它们并不是按照你预料的顺序显示出来的。数组和变量一样,都是在使用时自动创建的,awk也同样会自动判断其存储的是数字还是字符串。一般而言,awk中的数组用来从记录中收集信息,可以用于计算总和、统计单词以及跟踪模板被匹配的次数等等。

显示/etc/passwd的账户:

awk -F ':' 'BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i = 0; i < NR; i++) print i, name[i]}' /etc/passwd

0 root

1 daemon

2 bin

3 sys

4 sync

5 games

注意:NF是记录域的个数,NR是记录行的总行数。第一阶段由BEGAIN字段标识,定义了一个变量count并赋初值0;第二阶段是主输入循环,对输入的文件的每行进行处理;第三阶段由END标识,是读取文件完毕所执行的动作。

对应于上面查看数组中的结果:

awk 'BEGIN {FS=","} {split($1, name, " "); for(i in name) print name[i]}' students

 

 

 

sedawk是用户、程序员和管理员应用的工具。之所以称为sed是因为它是一个流编辑器(stream editor),用于对许多文件执行一系列的编辑操作。awk是根据它的开发者Aho、Weinberger和Kernighan命名的。awk是一种编程语言,它可以使你很容易地处理结构化数据和生成格式化报告。第二版介绍了awk的POSIX标准,同时介绍了一些可免费使用的以及商业版的awk。 本书在一开始就给出了一个概述和指南,论述了从grep到sed再到awk不断改进的功能。sedawk具有相同的命令行语法,以脚本的形式接收用户的命令。因为所有这三个程序都使用UNIX正则表达式,因此书中用一章的篇幅来介绍UNIX的正则表达式语法。 然后,本书介绍如何编写sed脚本。从编写几行简单的脚本开始,学习进行手工编辑操作的其他基本命令和高级命令,以及由此引入的简单程序结构。这些高级命令包括用于处理保持空间、即一个临时缓冲区的命令。 本书的第二部分经过广泛的修订,包括了POSIX awk,以及3个可免费使用的和3个商业版的awk。本书介绍了awk语言的主要特点以及如何编写简单的脚本。你还能了解到: * 通用的程序结构 * 如何使用awk的内部函数 * 如何编写用户的定义函数 * awk程序的调试技术 * 如何开发一个处理索引的应用程序,该程序演示了awk的强大功能 * 得到不同awk版本的FTP和联系信息 本书还包含了一组用户提供的程序,这些程序展示了广泛的sedawk程序风格和技巧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值