`
luoxiaohui_java
  • 浏览: 13367 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

AWK工具使用学习笔记(二)

 
阅读更多

 

一、AWK操作符:

1、给域命名。 给域取一个有意义的名字,更利于记忆。

tom@svr:~/ssh$ awk '{name=$1;belts=$4;if(belts ~/Yellow/) print name" is belt "

belts }' grade.txt

P.Bunny is belt Yellow

注意点:a 用分号分隔不同的定义语句; b 变量可以直接输出,但原样输出的字符串则必须用引号。

 

tom@svr:~/ssh$ awk '{name=$1;belts=$4 if(belts ~/Yellow/) print name "is belt " blets }' grade.txt

awk: line 1: syntax error at or near if  缺少分号

 

 

2、修改数据域的取值。

修改M.Tansley的目前级别分域,使其数值从40减为39

 awk '{name=$1;score=$6; if(name~/M.Tansley/) score=score-1; print name "\t" score}' grade.txt

会输出其他的行

tom@svr:~/ssh$ awk '{name=$1;score=$6; if(name=="M.Tansley") {score=score-1; print name "\t" score} } ' grade.txt

M.Tansley       39

tom@svr:~/ssh$

只会输出当前行。区别:后者将score1和打印动作框起来作为if模式的动作;而前者中只有score1if模式的动作,打印动作属于缺省动作。

 

3、只显示修改的记录。

tom@svr:~/ssh$ awk '{name=$1;score=$6; if(name=="M.Tansley") {score=score-1; print name "\t" score} } ' grade.txt

M.Tansley       39

tom@svr:~/ssh$

 

4、新增列

tom@svr:~/ssh$ awk 'BEGIN {print "Name    Difference\n--------------------------"} {if($6<$7) {dif=$7-$6; print $1,dif} }' grade.txt

Name    Difference

--------------------------

M.Tansley 4

J.Lulu 2

tom@svr:~/ssh$

注意与 awk 'BEGIN {print "Name    Difference\n--------------------------"} {if($6<$7) dif=$7-$6; print $1,dif }' grade.txt 的区别。dif赋值只在$6<$7满足的前提下执行,而print则为缺省执行。

 

二、AWK内置的字符串函数

1)gsub        查找与替换,相当于sed

格式gsub(/目标模式//替换模式/,范围) 第三个参数可以省略,若省略则表示在$0范围内查找与替换。

例:将学号为4842的字段替换成4800.

tom@svr:~/ssh$ awk 'gsub(/4842/,4800) {print $0}' grade.txt

J.Troll         07/99   4800    Brow-3  12      26      26

tom@svr:~/ssh$

 

2)length     返回长度

例:在末尾返回名字域的字符串长度。

tom@svr:~/ssh$ awk '{len=length($1); {print $0,len}}' grade.txt

M.Tansley       05/99   48311   Green   8       40      44 9

J.Lulu          06/99   48317   green   9       24      26 6

P.Bunny         02/99   48      Yellow  12      35      28 7

J.Troll         07/99   4842    Brow-3  12      26      26 7

L.Tansley       05/99   4712    Brow-3  12      30      28 9

tom@svr:~/ssh$

 

3)index      返回目标字符串的第一位置

例:返回字符串P.Bunny中第一个出现ny的位置。

tom@svr:~/ssh$ awk 'BEGIN {ind=index("P.Bunny","ny"); print ind} ' grade.txt

6

tom@svr:~/ssh$

 

4)match    是否包含目标字符

例子1 name域中含有L字母的行。

tom@svr:~/ssh$ awk '{name=$1; if(match(name,/L/)) {print $0} }' grade.txt

J.Lulu          06/99   48317   green   9       24      26

L.Tansley       05/99   4712    Brow-3  12      30      28

tom@svr:~/ssh$

例子2name域中L字母打头的行。

tom@svr:~/ssh$ awk '{name=$1; if(match(name,/^L/)) {print $0} }' grade.txt

L.Tansley       05/99   4712    Brow-3  12      30      28

tom@svr:~/ssh$

例子3name域中L出现的次数为1或者多次的行。

tom@svr:~/ssh$ awk '{name=$1; if(match(name,/L+/)) {print $0} }' grade.txt

J.Lulu          06/99   48317   green   9       24      26

L.Tansley       05/99   4712    Brow-3  12      30      28

 

 

5)split        将源字符用分隔符分成字符数组

第一个参数:指定被分割的字符串

第二个参数:指定数组名

第三个参数:指定分割符,必须用双引号例如"." ,"-" ,"/"

tom@svr:~/ssh$ awk '{print split($4,myarr,"-")}' grade.txt

1

1

1

2

2

tom@svr:~/ssh$

 

6)sprint     格式输出

 

 

7)sub        发现并替换模式的第一次出现位置

例:

tom@svr:~/ssh$ awk '{print $0}' grade.txt

M.Tansley       05/99   48311   Green   8       40      44

J.Lulu          06/99   48317   green   9       24      26

P.Bunny         02/99   48      Yellow  12      35      28

J.Troll         07/99   4842    Brow-3  12      26      26

L.Tansley       05/99   4712    Brow-3  12      30      28

tom@svr:~/ssh$ awk '{name=$1;if(name=="J.Troll")sub(/26/,50,$0); print $0 }' grade.txt

M.Tansley       05/99   48311   Green   8       40      44

J.Lulu          06/99   48317   green   9       24      26

P.Bunny         02/99   48      Yellow  12      35      28

J.Troll         07/99   4842    Brow-3  12      50      26

L.Tansley       05/99   4712    Brow-3  12      30      28

tom@svr:~/ssh$

 

 

8)substr   截取字符串,得到子串

例:

tom@svr:~/ssh$ awk '{fullname=$1;firstName=substr(fullname,3,99); print firstName "\t" $0}' grade.txt

Tansley M.Tansley       05/99   48311   Green   8       40      44

Lulu    J.Lulu          06/99   48317   green   9       24      26

Bunny   P.Bunny         02/99   48      Yellow  12      35      28

Troll   J.Troll         07/99   4842    Brow-3  12      26      26

Tansley L.Tansley       05/99   4712    Brow-3  12      30      28

tom@svr:~/ssh$

 

awk -F[:] '{print $1,$3,$4}' /etc/passwd 

使用特殊域分割符。

分享到:
评论

相关推荐

    linux awk学习笔记

    Linux中的`awk`是一个强大的文本分析工具,由Alfred Aho、Brian Kernighan和Peter Weinberger三位开发者创建,因此得名。`awk`的主要功能是处理文本和数据,通过匹配特定模式对文件中的行进行操作。在Linux系统中,...

    AWK学习笔记.doc

    本笔记主要涵盖了AWK的基础知识和高级特性,旨在帮助读者理解和掌握这一实用工具。 **一.1 什么是AWK?** AWK是由Aho、Weinberger和Kernighan三位计算机科学家开发的,它的名字就是由他们的姓氏首字母组成的。AWK是...

    awk学习使用笔记及举例

    ### awk学习使用笔记及举例 #### 1. awk简介 awk是一种专为文本处理而设计的编程语言,常用于Linux/Unix环境下。它可以处理来自标准输入、文件或其它命令输出的数据。awk支持用户自定义函数和动态正则表达式等功能...

    awk学习笔记,从论坛整理而来

    `awk` 是一种强大的文本分析工具,常用于处理和解析结构化的文本文件,如日志文件、配置文件等。在Linux和Unix系统中,`awk` 提供了一种灵活的方式来提取、过滤和处理数据。本篇文章将深入讲解 `awk` 的基本用法和...

    Awk学习笔记和指南

    它在命令行中使用,但更多是作为脚本来使用。awk的处理文本和数据的方式是这 样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。如果没有指定处理动作,则把匹配的...

    awk 学习笔记加例子

    **awk学习笔记与实例解析** awk 是一种强大的文本分析工具,尤其在Linux和Unix系统中广泛使用。它允许用户通过模式匹配和处理规则对输入数据进行操作,特别适合于处理结构化的文本文件,如日志文件、配置文件等。本...

    linux下AWK学习笔记

    AWK是一种强大的文本分析工具,尤其在Linux和Unix环境下被广泛使用。它能够对文本文件中的数据行进行处理,提取、分析或者转换数据,非常适合数据分析和报告生成。本笔记将详细介绍AWK的基本概念、语法、命令选项...

    awk学习笔记(学习awk编程的好帮手)

    第二种是通过脚本文件来执行awk命令,形如`awk [options] -f scriptfile var=value file(s)`,其中`-f`选项指定了包含awk命令的文件。 awk支持多种命令选项,例如`-F fs`用来指定输入文件的字段分隔符,`-v var=...

    awk学习笔记.pdf

    使用AWK时,可以按照以下三种方式之一调用AWK命令: 1. 直接在命令行中嵌入AWK脚本,并指定输入文件。例如: ``` awk '[options] program-text file-list' ``` 其中,`[options]` 是AWK的常用选项,比如 `-F` ...

    PDF电子书《Awk学习笔记2010修改版》

    ### PDF电子书《Awk学习笔记2010修改版》相关知识点 #### AWK简介 AWK是一种强大的脚本语言,由Alfred V. Aho、Peter J. Weinberger和Brian W. Kernighan在1977年设计并实现。这三位计算机科学家的名字首字母合成了...

    AWK-学习笔记(共享)

    AWK是一种强大的文本分析工具...学习AWK需要熟悉其独特的语法结构和内置功能,通过不断的实践和案例分析,可以逐步掌握这个强大的文本处理工具。对于系统管理员、数据分析师和程序员来说,掌握AWK能大大提高工作效率。

    awk学习笔记

    awk学习笔记主要涵盖了awk编程语言的基础知识和常用功能。awk是一种强大的文本分析工具,尤其在Linux/Unix环境下广泛使用。它能够处理标准输入、文件或其它命令的输出,通过模式匹配对文本进行分析和处理。 1. **...

    sed awk学习

    sed awk 学习笔记 SED 是一个“非交互式”的面向字符流的编辑器,它可以在一个地方指定所有的编辑指令,然后通过文件传递一次来执行他们。但是它在每次多于一行的处理能力方面有限制。SED 的优点是可以批量处理文件...

    GAWK: Effective AWK Programming;AWK说明书

    第二部分致力于使用awk解决问题。这部分通过提供awk函数库和实际awk程序的示例,教导读者如何构建实用的awk程序来解决现实世界中的问题。 在第三部分中,书中介绍了gawk的高级功能,包括对gawk进行国际化处理的方法...

    GAWK-Effective AWK Programming - GNU Awk编程经典

    最后,附录部分提供了关于awk语言演变的资料、gawk的安装指南、实现笔记和基本编程概念的简要介绍。这些附录为读者提供了深入理解和使用awk所需的额外信息。 总而言之,《GAWK: Effective AWK Programming - GNU ...

    awk学习的相关内容

    文件名`awk学习-20101008.doc`可能包含了作者在2010年10月8日整理的awk学习笔记,涵盖了基本语法、常用命令和实战案例。可能包括以下内容: 1. **基本语法**:介绍awk的基本结构,如模式-动作对,以及如何指定输入...

    awk简介与学习笔记收集第1/3页

    【awk简介】 awk是一种强大的文本分析工具,主要用于在Linux/Unix环境中处理文本和数据。它的名字来源于三位创始人——Alfred ...通过深入学习和实践,我们可以利用awk编写出高效且简洁的脚本来解决各种文本处理问题。

Global site tag (gtag.js) - Google Analytics