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. HCTF2018-admin[条件竞争]

    附上网上师傅的wp  学习链接: https://www.jianshu.com/p/f92311564ad0 按照师傅的wp复现一下: 源代码审计,去看路由里的login函数和change函数都在没 ...

  2. 解决sql server2008数据库安装之后,web程序80端口被占用问题(终极方案)

    解决sql server2008数据库安装之后,web程序80端口被占用问题(终极方案) 前言:原来电脑上的Apache一直使用正常,在安装sql server2008后,突然发现Apache无法启动 ...

  3. JS高级---案例:验证密码的强度

    案例:验证密码的强度 1. 给我密码,我返回对应的级别 2. 每次键盘抬起都要获取文本框中的内容, 验证文本框中有什么东西, 得到一个级别, 然后下面的div显示对应的颜色 <!DOCTYPE ...

  4. python面试的100题(13)

    29.Given an array of integers 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数.你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用.示例:给定nums ...

  5. 2019牛客多校第五场 G subsequence 1 dp+组合数学

    subsequence 1 题意 给出两个数字串s,t,求s的子序列中在数值上大于t串的数量 分析 数字大于另一个数字,要么位数多,要么位数相同,字典序大,位数多可以很方便地用组合数学来解决,所以只剩 ...

  6. Java-重载和重写区别剖析

    重载(Overload)和重写(Override)是任何一门面向对象的语言都会具有的两个特性,自然,Java语言中也具有此两种特性.但是,对于Java新手,或者没有面向对象语言经验的开发者而言,这会是 ...

  7. ORA_12514:TNS:listener does not currently know of service requested in connect descriptor

    问题描述 ORA_12514:TNS:listener does not currently know of service requested in connect descriptor 解决方式 ...

  8. ISCC2018_leftleftrightright-Writeup

    leftleftrightright(150) 这个题学到了不少东西,值得认真写一下 下载好文件后发现是upx的壳,upx -d直接脱掉后运行,发现是经典的check输入的题目(作为一个linuxer ...

  9. java json转换工具类

    在java项目中,通常会用到json类型的转换,常常需要对 json字符串和对象进行相互转换. 在制作自定义的json转换类之前,先引入以下依赖 <!--json相关工具--><de ...

  10. qq自己设定动态图像视屏

    类似于样但是是自己定义的视屏先上壁纸 这个具体是怎么制作的呢? 先从网络上下载自己喜欢的mp4视屏 qq头像上面点击拍摄动态图像 先随意拍摄2秒保持拍摄完成的状态不要点击确定 然后用手机文件夹找到你要 ...