1 命令功能

awk是linux环境下的一个强大的文本工具,由于awk天生提供对文件中文本分列进行处理,所以如果一个文件中的每行都被特定的分隔符(默认为空格)隔开,我们就可以将这个文件看成是有很多列的文本组成,这样的文件最适合用awk进行处理,其实awk在工作中多用于处理log文件。awk在处理庞大文件时不会出现内存溢出或是处理缓慢的问题。

awk有3个不同的版本:awk、nawk、gawk,未做特别说明的,一般指gawk,gawk是awk的GNU版本。

2 命令语法

awk 【选项】  '{pattern + action}'  【filename】 #pattern表示awk在文件中要查找的内容,而action指在找到匹配内容时所执行的一系列命令

awk  [options]  'BEGIN{ commands } pattern{ command1;commandn } END{ commands }'  filename

# options表示awk的可选命令选项,

# BEGIN 初始化代码块,在对每一行进行处理之前,初始化代码,主要是引用全局变量,设置FS分隔符

# pattern  匹配代码块,可以是字符串或正则表达式

# {} 命令代码块,包含一条或多条命令

# ; 多条命令使用分号分隔

#  结尾代码块,在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾摘要信息ech

3 命令参数

-F   指定输入文本的分隔符,默认为空格,其分隔符可以是一个字符串也可以是一个正则表达式。-F还可指定多个分隔符,如‘’[ ,]‘’即指定空格和逗号作为分隔符,在指定分隔符时最好加引号。[ ,]+ 表示将空号中在匹配时出现连续的分隔符看成一个,如echo ---1:---2 | awk -F "[-:]+" '{print $2}' 打印出1,echo ---1:---2 | awk -F "[-:]+" '{print $3}' 打印出2.

-v  var=value 赋值一个用户定义变量

-f   从脚本文件中读取awk命令

$0   表示整个当前行

$1   表示每行的第一个字段

NF   当前输入记录中的字段数

$NF   表示最后一个列

NR   表示文件行数的记录号,处理多文件时记录数递增

FNR   处理单文件时与NR类似,不过多文件时,每个文件的记录号都从1开始

\t   制表符

\n   换行符

FS   BEGIN时定义文本字段分隔符,即列与列之间的分隔符,默认是空格

OFS   输出字段分隔符,默认也是空格

RS   定义输入记录分隔符,即行与行之间的分隔符,默认换行符

ORS   输出记录分隔符,默认为换行符

==   等于,精确比较

!=   不等于

&&   逻辑与

||   逻辑或

4 使用范例

【1】awk -F: '{print $1 $3}' /etc/passwd  #$1与$3内容相连输出,不分隔。

【2】awk -F: '{print $1,$3}'  /etc/passwd  #$1与$3中间多一个逗号,使之输出内容间以空格分隔

【3】awk -F: '{print "username:" $1 "\t\t Uid:" $3}' /etc/passwd  #自定义输出

【4】awk '/mysql/{print }' /etc/passwd  #从文件中找出匹配字符串的行

【5】awk '!/root/{print $0}' /etc/passwd #从文件中找出不匹配字符创的行

【6】awk -F: '/mail/,/mysql/{print}' /etc/passwd  #区间匹配,匹配包含字符串与字符串的行内容

【7】awk -F: '$1~/mail/{print $1}' /etc/passwd  #$1与指定内容匹配才显示

【8】awk '/[6][9][7]*/{print $0}' /etc/passwd #匹配包含69为数字开头的行,如69,697,6977等

【9】awk -F: '$1~/mail/ && $3>8 {print }' /etc/passwd  #逻辑与,匹配$1匹配mail,并且$3》8的内容

【10】awk -F: '{if($1~/mail/) {print $1} else {print $2}}' /etc/passwd  #找到匹配的行,输出该行第一个字段内容,不匹配的行输出第二个字段的内容

【11】netstat -anp|awk '$6=="LISTEN" || NR==1 {printf "%-3s %-10s %-10s %-10s \n",NR,$1,$2,$3}'  #匹配$6=="LISTEN"或者NR==1的行,并且格式化输出显示内容。

#printf表示格式输出

#%格式化输出分隔符

#-3长度为8个字符

#s表示字符串类型

【12】awk -F: 'BEGIN{A=0;B=0} {if($3>100) {A++; print "large"} else {B++; print "small"}} END{print A,"\t",B}' /etc/passwd  #自定义变量,若$3>100,则A+1,否则B+1,最后输出A和B的值。

作者:linux每天一小步

出处:http://www.cnblogs.com/westoslinux

如果你真心觉得文章写得不错,而且对你有所帮助,不妨帮忙“推荐"一下,您的“推荐”将是我最大的写作动力!

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接!

linux每天一小步---awk命令详解的更多相关文章

  1. linux每天一小步---ls命令详解

    1 命令功能: 列出当前目录下或者指定目录下的所有文件和目录,ls是list的缩写. 2 命令语法: ls [选项] [目录名]     #注:[]中的内容为非必选项 3 命令选项: -a 列出目录下 ...

  2. linux每天一小步---sed命令详解

    1 命令功能 sed是一个相当强大的文件处理编辑工具,sed用来替换,删除,更新文件中的内容.sed以文本行为单位进行处理,一次处理一行内容.首先sed吧当前处理的行存储在临时的缓冲区中(称为模式空间 ...

  3. linux每天一小步---grep命令详解

    1 命令功能 grep(global regular expression print全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来. g ...

  4. linux每天一小步---xargs命令详解

    1 命令功能 xargs用来从标准输入中执行命令行 xargs命令用来将一些不支持管道传递参数的命令而使之支持 2 命令语法 xargs  [选项参数] commands 3 命令参数 -O 当标准输 ...

  5. linux每天一小步---find命令详解

    1 命令功能 find命令用于搜索指定目录下的文件,并配合参数做出相应的处理. 2 命令语法      find  搜索路径pathname 选项option [-exec -ok -print  执 ...

  6. linux每天一小步---tail命令详解

    1 命令功能 tail命令用于显示文件中末尾的内容(默认显示最后10行内容) 2 命令语法 tail [选项参数] [文件名1] [文件名2] 3 命令参数 -f  用于循环读取文件的内容,监视文件的 ...

  7. linux每天一小步---head命令详解

    1 命令功能      head命令用来查看文件的前多少行或多少字节的内容(默认显示10行) 2 命令语法 head  [选项参数]  [文件名] 3 命令参数 -q  显示多个文件的内容时不显示文件 ...

  8. linux每天一小步---alias命令详解

    1 命令功能     alias命令用来设置指令的别名,alias命令设置的别名只限于该次登陆操作,若要每次登入即自动设好别名,可在/etc/profile或自己的~/.bashrc中设定指令的别名. ...

  9. linux每天一小步---cat命令详解

    1 命令功能 cat命令是linux系统下的一个文本输出命令,通常用于查看文件的内容. 2 命令语法 cat  [选项参数]  文件名 3 命令参数 -n  由1开始对所有输出的内容行数编号 -b   ...

随机推荐

  1. 微信小程序设置底部导航栏目方法

    微信小程序底部想要有一个漂亮的导航栏目,不知道怎么制作,于是百度找到了本篇文章,分享给大家. 好了 小程序的头部标题 设置好了,我们来说说底部导航栏是如何实现的. 我们先来看个效果图 这里,我们添加了 ...

  2. Shell实现Unix进程间信息交换的几种方法

    本文将介绍在SCO OpenServer5.0.5系统中使用shell语言来实现进程间信息交换的几种方法: 使用命名管道实现进程间信息交换 使用kill命令和trap语句实现进程间信息交换 使用点命令 ...

  3. GIT的安装及上传代码到码云

    前言 昨天初次接触GIT及码云,虽然用了2个多小时才搞定,但是还是挺开心的.码云是一个可以储存我们写的代码的一个平台,而Git是一款免费.开源的分布式版本控制系统,可以敏捷高效地处理任何或小或大的项目 ...

  4. (转)TreeSet简单介绍与使用方法

    TreeSet简介 TreeSet是JAVA中集合的一种,TreeSet 是一个有序的集合,它的作用是提供有序的Set集合.它继承于AbstractSet抽象类,实现了NavigableSet< ...

  5. Flask框架的学习与实战(一):开发环境搭建

    Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2.很多功能的实现都参考了django框架.由于项目需要,在 ...

  6. 2018 Multi-University Training Contest 4-Problem B. Harvest of Apples

    由公式$S(n, m)=S(n - 1, m) + S(n - 1, m - 1) = 2 * S(n - 1, m) - C_{n-1}^{m}$ 莫队思想

  7. 8 ways to improve ASP.NET Web API performance

    ASP.NET Web API is a great piece of technology. Writing Web API is so easy that many developers don’ ...

  8. 总结开发中使用到的npm 库

    1.Swiper  https://github.com/nolimits4web/Swiper 移动端slides插件 2.fetch https://github.com/whatwg/fetch ...

  9. linux nginx安装以及配置

    一.Nginx简介 Nginx (“engine x”) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由Igor Sysoev为俄罗斯访问量第二的R ...

  10. 不用写代码就能实现深度学习?手把手教你用英伟达 DIGITS 解决图像分类问题

    2006年,机器学习界泰斗Hinton,在Science上发表了一篇使用深度神经网络进行维数约简的论文 ,自此,神经网络再次走进人们的视野,进而引发了一场深度学习革命.深度学习之所以如此受关注,是因为 ...