awk是一个强大的文本分析工具,在对数据进行分析并生成报告时显得尤为强大。

使用方法:awk [options]  'BEGIN{ commands } pattern{ commands } END{ commands }'  file,其中commands都包含在大括号内。

第一步:运行BEGIN{ commands }语句块中的语句

第二步:从文件或标准输入(stdin)读取一行,以空格为默认分隔符将每行切片,然后运行pattern{ commands }语句块,逐行读取直到文件被读取完毕

第三步:读至输入流末尾时运行END{ commands }语句块

1.一个简单的awk用法实例:

[root@oldboy ~]# awk -F: '{print $1,$6}' /etc/passwd
root /root
bin /bin
daemon /sbin
adm /var/adm
……

其中参数-F:指定原文件以:分片,print表示打印,$1和$6表示每一行的第1片和第6片($0表示整行内容),/etc/passwd表示要处理的文件。

2.使用pattern部分

上述例子表示对每一行进行处理,而使用pattern则可对满足条件的行进行处理。

例如创建一个文件b.txt

[root@oldboy ~]# cat b.txt
Alice girl
Bob boy dance bike
Jane girl
Lily girl tennis
[root@oldboy ~]# awk '$2>=20{print $1,$2}' b.txt
Bob
Lily

$2>=20表示第2片的值大于等于20时,才进行后续的打印操作。

3.begin语句块

begin语句块是在awk匹配文件之前运行的并且只执行一次,所以在begin语句块中$n是不可用的。一般情况下可以在begin语句块中做一些变量初始化的工作,或者一些只需要在开始打印一次的内容(例如输出表的表头)。

4.end语句块

end语句块是在awk循环执行完所有行的处理之后再执行的,end语句块中的内容也只执行一次,一般用于打印一些只需在末尾输出一次的内容。

注意begin语句块、pattern语句块和end语句块都在一个单引号内,并且单引号内的需要使用双引号。(尝试外层用双引号内层用单引号,有报错)

[root@oldboy ~]# awk 'BEGIN{print "name","age","gender"} $2>=20{print $1,$2,$3} END{print "end"}' b.txt
name age gender
Bob boy
Lily girl
end

5.awk使用变量

①awk中内置变量

FILENAME:awk浏览的文件名  NF:浏览记录的域的个数  

NR:已读的记录数,如果有多个文件这个值不断累加  FNR:当前记录数,即自身文件的行号 

FS:设置输入域分隔符,等价于-F参数  OFS:设置输出域分隔符

RS:输入的记录分隔符, 默认为换行符  ORS:输出的记录分隔符, 默认为换行符

ARGC:命令行参数个数  ARGV:命令行参数排列  ENVIRON:支持队列中系统环境变量的使用

[root@oldboy ~]# awk -v OFS='#' '{print "文件名:"FILENAME,"浏览记录数:"NR,"域个数:"NF,"行内容:"$1,$2} END{print "文件"FILENAME"处理完毕,行数为"NR}'  b.txt
文件名:b.txt#浏览记录数:#域个数:#行内容:Alice#
文件名:b.txt#浏览记录数:#域个数:#行内容:Bob#
文件名:b.txt#浏览记录数:#域个数:#行内容:Jane#
文件名:b.txt#浏览记录数:#域个数:#行内容:Lily#
文件b.txt处理完毕,行数为4

②自定义变量

[root@oldboy ~]# a=
[root@oldboy ~]# b=
[root@oldboy ~]# awk -v x=$a -v y=$b 'BEGIN{print x+y}' [root@oldboy ~]# awk -F# 'BEGIN{COUNT=0} {count+=$2} END{print count}' a.txt

6.awk中的判断语句

[root@oldboy ~]# awk '$2>20{print}' b.txt
Lily girl tennis
[root@oldboy ~]# awk '{if($2>20) print}' b.txt
Lily girl tennis
[root@oldboy ~]# awk 'BEGIN{age=25;if(age>18){print "成年人"} else if(age==18){print "刚好18岁"} else{print "未成年人"} }'
成年人

7.awk中的循环语句

[root@oldboy ~]# awk 'BEGIN{sum=0;i=1;while(i<51){sum+=i;i++} print sum}'

[root@oldboy ~]# awk 'BEGIN{sum=0;i=1;do{sum+=i;i++}while(i<51) print sum }'

[root@oldboy ~]# awk 'BEGIN{sum=0;for(i=1;i<51;i++) {sum+=i} print sum}'

在判断语句和循环语句中,多条语句之间用分号隔开,复合语句块用大括号括起来。

awk循环语句中使用continue跳过当前循环,使用break退出整个循环。

8.awk使用数组

[root@oldboy ~]# cat test.txt
zhangsan
lisi
zhangsan
lisi
wangwu
[root@oldboy ~]# awk '{sum[$1]+=$2} END{for(k in sum) print k,sum[k]}' test.txt
zhangsan
lisi
wangwu

linux awk用法的更多相关文章

  1. linux awk的用法

    linux awk的用法 <pre>[root@iZ23uewresmZ ~]# cat /home/ceshis.txtb 12 42 30 b 03 43 25 a 08 10 16 ...

  2. linux awk命令详解

    linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...

  3. awk 用法(使用入门)

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

  4. 精通awk系列(4):awk用法入门

    回到: Linux系列文章 Shell系列文章 Awk系列文章 awk用法入门 awk 'awk_program' a.txt awk示例: # 输出a.txt中的每一行 awk '{print $0 ...

  5. Linux awk命令 --三剑客老大

    Linux awk命令 --三剑客老大 基本用法: awk  [参数]  ['找谁{干啥}']  文件 参数: -F 分隔符 -v 创建或修改awk变量 OFS 输出分割符 awk显示每一列的时候分隔 ...

  6. linux awk命令详解,使用system来内嵌系统命令, awk合并两列

    linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...

  7. linux awk 命令实用手册

    0,简介 Linux awk 是一个实用的文本处理工具,它不仅是一款工具软件,也是一门编程语言.awk 的名称来源于其三位作者的姓氏缩写,其作者分别是Alfred Aho,Peter Weinberg ...

  8. linux curl用法详解

    linux ‍‍curl用法详解 ‍‍curl的应用方式,一是可以直接通过命令行工具,另一种是利用libcurl库做上层的开发.本篇主要总结一下命令行工具的http相关的应用, 尤其是http下载方面 ...

  9. awk用法小结(作者总结)

    http://www.chinaunix.net/old_jh/24/691456.html http://wenku.baidu.com/view/ebac4fc658f5f61fb736664d. ...

随机推荐

  1. sqlserver 常见的表名修改

    查看表:exec sp_help 表名 查看列: exec sp_columns 表名 查看列:select * from information_schema.columns where table ...

  2. connection reset by peer

    connection reset by peer https 请求返回下面的内容 {"msg":"connection reset by peer"," ...

  3. linux mysql 定时备份

    1.查看磁盘空间情况: 既然是定时备份,就要选择一个空间充足的磁盘空间,避免出现因空间不足导致备份失败,数据丢失的恶果! 存储到当前磁盘这是最简单,却是最不推荐的:服务器有多块硬盘,最好是把备份存放到 ...

  4. kubernetes in action - Pods

    Pods 在上一篇也说明了,pods是kubernetes的最小部署单元,并且所有在pods中的container共享namespaces 那么为什么需要pods这样的概念? 因为在实际中,我们有一种 ...

  5. 学习ActiveMQ(七):JMS消息的事务管理

    Spring提供了一个JmsTransactionManager用于对JMS ConnectionFactory做事务管理.这将允许JMS应用利用Spring的事务管理特性.JmsTransactio ...

  6. Android的SQlite的使用

    Android系统集成了一个轻量级的数据库:SQlite.SQlite不像Oracle.MySQl数据库那样需要安装.启动服务器进程,SQLite数据库只是一个文件 实例1:向数据库里插入数据 主界面 ...

  7. Spring Boot 国际化及点击链接跳转国家语言

    一.国际化 在SpringBoot中已经自动帮我们配置管理国际化资源的组件,所以我们只需要编写代码就可. @Bean @ConfigurationProperties(prefix = "s ...

  8. 下载安装Git

    1.下载地址:https://git-scm.com/download/win  这里是下载64位的 2.安装步骤 (1)下载完成得到一个exe文件,双击傻瓜式安装 (2)开始安装 (3)选择安装的工 ...

  9. ajax阻挡设置

    在请求时候设置一个变量为false的.请求方法时候用他的值判断是否在请求中,如果是true就是有请求了,就直接return ,不执行后面的方法, 如果是没有请求,就让值为true,然后开始执行ajax ...

  10. 牛客随笔(c++)

    1.关于指针的字节大小: 当为32位系统时大小为4字节,64位系统时大小为8字节: #include<iostream> using namespace std; int main() { ...