AWK 是一种用于处理文本的编程语言工具。awk经过改进生成的新的版本nawk,gawk,现在默认linux系统下日常使用的是gawk,用命令可以查看正在应用的awk的来源(ls -l /bin/awk )

WK 提供了极其强大的功能:可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。

尽管操作可能有点复杂,但命令的语法始终是:

awk '{pattern + action}' 或者 awk 'pattern {action}'
 
其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号 ({}) 不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。
 
awk处理的工作与数据库的处理方式有相同之处,其相同处之一就是awk支持对记录和字段的处理,这也是awk优于二者的原因之一。
 
内置变量:
 
内置的字符串函数
gsub(r,s)
在整个$0中用s代替r
gsub(r,s,t)
在整个t中用s替代r
index(s,t)
返回s中字符串t的第一位置
length(s)
返回s长度
match(s,r)
测试s是否包含匹配r的字符串
split(s,a,fs)
在fs上将s分成序列a
sprint(fmt,exp)
返回经fmt格式化后的exp
sub(r,s)
用$0中最左边最长的子串代替s
substr(s,p)
返回字符串s中从p开始的后缀部分
substr(s,p,n)
返回字符串s中从p开始长度为n的后缀部分

内置的字段函数

 
                    $0 : awk变量 $0 保存当前正在处理的行内容
                    NR : 当前正在处理的行是 awk 总共处理的行号。
                    FNR: 当前正在处理的行在其文件中的行号。
                    NF :每行被处理时的总字段数
                    $NF: 当前处理行的分隔后的最后一个字段的值
                    FS : 输入行时的字段分隔符,默认空格
                    OFS : 输出字段分隔符,默认是一个 空格
                    ORS 输出记录分隔符, 默认是换行符
 
 
 awk用0表示整个行(记录)。不同的字段之间是用称作分隔符字符分隔开的。系统默认的分隔符是空格。awk允许在命令行中用-F re的形式来改变这个分隔符。正是由于这些内置函数的使用,使awk处理字符串的功能更加强大。
 
使用: 一是通过前面说的内置变量,在awk程序中引用内置变量不需要使用标志符""  ,还有就是自定义变量,awk允许用户在awk程序语句中定义并调用自已的变量,在awk中引用自定义变量必须在它前面加上标志符""。
 
            二是通过命令行

          例:显示文本文件mydoc匹配(含有)字符串"sun"的所有行。
 
          awk '/sun/' mydoc
 
          由于显示整个记录(全行)是awk的缺省动作,因此可以省略action项。
 
          awk '/sun/' mydoc
 
       例:下面是一个较为复杂的匹配的示例:
 
        awk '/[Ss]un/,/[Mm]oon/ ' myfile
 
       将会显示所有匹配Sun或sun的行与匹配Moon或moon的行之间的行,并显示到标准输出上。
 
       例:下面的示例显示了内置变量和内置函数length()的使用:
 
       awk 'length($0)>80 {print NR}' myfile
 
       该命令行将显示文本myfile中所有超过80个字符的行号,在这里,用0表示整个记录(行),同时,内置变量NR不使用标志符''。
 
假设要对linux中的用户进行安全性检查,方法是查看/etc下的passwd文件,检查其中的passwd字段(第二字段)是否为"*",如不为"*",则表示该用户没有设置密码,显示出这些用户名(第一字段)。可以用如下语句实现:
 
                          #awk -F : '$2!="*" {printf("%s no password!\n",$1)}' /etc/passwd
 
在这个示例中,passwd文件的字段分隔符是“:”,因此,必须用-F:来更改默认的字段分隔符,这个示例中也涉及到了内置函数printf的使用。
 
运算与判断:
 
awk支持多种运算,这些运算与C语言提供的基本相同:如+、-、*、/、%等等,同时,awk也支持C语言中类似++、--、+=、-=、=+、=-之类的功能。给熟悉c语言的人带来了挺大的方便。
 
awk 中允许进行多种测试,如常用的==(等于)、!=(不等于)、>(大于)、>=(大于等于)、<=(小于等于)等等,同时,作为样式匹配,还提供了~(匹配于)和!~(不匹配于)判断。
 
 
作为对测试的一种扩充,awk也支持用逻辑运算符:!(非)、&&;(与)、||(或)和括号()进行多重判断,这大大增强了awk的功能。
 
 
流程控制:
 
awk提供的完备的流程控制语句类似于C语言。
 
awk 中两个特别的表达式,BEGIN和END,这两者都可用于pattern中(参考前面的awk语法),提供BEGIN和END的作用是给程序赋予初始状态和在程序结束之后执行一些扫尾的工作。任何在BEGIN之后列出
 
的操作(在{}内)将在awk开始扫描输入之前执行,而END之后列出的操作将在扫描完全部的输入之后执行。因此,通常使用BEGIN来显示变量和预置(初始化)变量,使用END来输出最终结果。我举个下面的
 
例子就好懂了
 
                awk 'BEGIN{print "----开始处理了-----"}  {print  "ok"}  END{print  "-----都处理完毕------"}'
-------开始处理了---------
ok
ok
ok
ok
ok
----都处理完毕------------
 
  1  ,if...else语句:
 
格式:
 
if(表达式
 
语句1
 
else
 
语句2
 
格式中"语句1"可以是多个语句,如果你为了方便awk判断也方便你自已阅读,你最好将多个语句用{}括起来。awk分枝结构允许嵌套,其格式为:
 
if(表达式1)
 
{if(表达式2)
 
语句1
 
else
 
语句2
}
语句3
 
else {if(表达式3)
 
语句4
 
else
 
语句5
}
语句6
 
当然实际操作过程中你可能不会用到如此复杂的分枝结构,这里只是为了给出其样式而已。
2、while语句
 
格式为:
 
while(表达式)
 
语句
 
3、do-while语句
格式为:
do
{
语句
}while(条件判断语句)
4、for语句
格式为:
for(初始表达式;终止条件;步长表达式)
{语句}
在awk 的 while、do-while和for语句中允许使用break,continue语句来控制流程走向,也允许使用exit这样的语句来退出。break 中断当前正在执行的循环并跳到循环外执行下一条语句。continue从当前位置跳到循
 
环开始处执行。对于exit的执行有两种情况:当exit语句不在 END中时,任何操作中的exit命令表现得如同到了文件尾,所有模式或操作执行将停止,END模式中的操作被执行。而出现在END中的exit将导致程序终止。
 
最后还有调用外部变量:
 

方法一:awk参数-v(推荐使用,易读)

[root@slave ~]# echo "unix script" |awk -v var="bash" 'gsub(/unix/,var)'
bash script [root@slave ~]# awk -v user=root -F: '$1 == **user**' /etc/passwd
root:x:0:0:root:/root:/bin/bash

gsub 使 AWK 中的内置函数,功能使搜索替换
'gsub(/unix/,var) 中的意思是搜索 unix 字符串,替换为 var 变量对应的值

方法二:在双引号的情况下使用

[root@slave ~]# var="bash"
[root@slave ~]# echo "unix script" |awk "gsub(/unix/,\"$var\")"
bash script

方法三:在单引号的情况下使用

[root@slave ~]# var="bash"
[root@slave ~]# echo "unix script" |awk 'gsub(/unix/,"'"$var"'")'
bash script
 
                                                                                                          结------------------------------------------------------------------------束
 

awk基本介绍的更多相关文章

  1. 【转】awk用法介绍

    1. 介绍 Awk是由Aho.Weinberger和Kernighan三位科学家开发的,特别擅长文本处理的linux 工具,该工具是 linux 下最常用的工具之一.Awk不是普通的工具,其实,也是一 ...

  2. shell编程awk基础介绍

    awk介绍 报告生成器,格式化文本输出 处理机制类似sed命令,自带循环处理    读入一行处理一行然后自动读取下一行再进行处理 sed命令换行的标识是固定的,只能是回车换行.    awk里面的换行 ...

  3. Linux中grep、sed、awk使用介绍

    linux文件操作命令介绍1)grepgrep 用于在文件中查找符合条件的记录grep 参数 过滤条件 文件过滤的条件中可使用正则表达式-c 显示符合的行数-i 忽略大小写-n 显示符合要求的记录,包 ...

  4. AWK的介绍学习

    第一节.awk的工作流程和基本用法 1.awk介绍 awk是一种报表生成器,就是对文件进行格式化处理的,这里的格式化不是文件系统的格式化,而是对文件内容进行各种"排版",进而格式化 ...

  5. 【Linux】awk详细介绍

    awk简介 awk是一种使用方便且表现力很强的编程语言,它可以应用在多种不同的计算与数据处理任务中.由于awk天生提供对文件中文本分列进行处理,所以如果一个文件中的每行都被特定的分隔符(常见的是空格) ...

  6. awk用法介绍

    Awk 程序的结构如下: awk 'BEGIN{ print "start" } pattern { commands } END{ print "end" } ...

  7. awk 用法(使用入门)

    转自:http://www.cnblogs.com/emanlee/p/3327576.html awk 用法:awk ' pattern {action} '  变量名    含义 ARGC   命 ...

  8. Linux awk命令详解??????????(研究)

    http://blog.chinaunix.net/uid-25120309-id-3801250.html 一.  AWK 说明  awk是一种编程语言,用于在linux/unix下对文本和数据进行 ...

  9. awk命令

    awk 手册   原文 Table of Contents 1. awk简介 2. awk命令格式和选项 2.1. awk的语法有两种形式 2.2. 命令选项 3. 模式和操作 3.1. 模式 3.2 ...

随机推荐

  1. numpy 中array 和ndrray的区别联系

    numpy.array()  标明array只是一个方法 ndarray 是类名,是一个实例. a=numpy.array(b)    #这是把变量b转换为数组a,这里array()是个方法,a的类型 ...

  2. bat文件一键运行python自动化脚本

    目标:建立一个双击即可运行自动化脚本的机制,而不用每次运行编译器,方便测试人员用户体验. 方法: 1. 将所有代码打包成exe文件,但一旦修改,又要重新打包. 2. 将运行代码写成bat文件,双击即执 ...

  3. Selenium模块/目录说明

      目录说明: selenium/common     #定义了webdriver的异常类 selenium/webdriver   #定义了webdriver所有python实现: 1.各种浏览器支 ...

  4. 回环屏障CyclicBarrier

    上一篇说的CountDownLatch是一个计数器,类似线程的join方法,但是有一个缺陷,就是当计数器的值到达0之后,再调用CountDownLatch的await和countDown方法就会立刻返 ...

  5. .Net中C# DateTime类的ToString()方法的使用

    Console.WriteLine("ToShortDateString:" + DateTime.Now.ToShortDateString()); Console.WriteL ...

  6. AcWing 899. 编辑距离

    #include <iostream> #include <algorithm> #include <string.h> using namespace std; ...

  7. nvalidSchema: Missing dependencies for SOCKS support

    首先需要安装pip3 1. 安装 setuptools wget --no-check-certificate https://pypi.python.org/packages/source/s/se ...

  8. Apache Kafka(十)Partitions与Replication Factor 调整准则

    Partitions与Replication Factor调整准则 Partition 数目与Replication Factor是在创建一个topic时非常重要的两个参数,这两个参数的取值会直接影响 ...

  9. eclipse非正常关闭,再打开后报错

    Previous operation has not finished; run 'cleanup' if it was interrupted 启动任务管理器,将javaw.exe进程杀死,然后重启 ...

  10. Jarvis OJ - 爬楼梯 -Writeup

    Jarvis OJ - 爬楼梯 -Writeup 本来是想逆一下算法的,后来在学长的指导下发现可以直接修改关键函数,这个题做完有种四两拨千斤的感觉,记录在这里 转载请标明出处:http://www.c ...