Linux awk命令
来源:互联网 发布:3dsmax2014软件许可证 编辑:程序博客网 时间:2024/05/01 17:17
1简介
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk是 AWK的 GNU版本。awk其名称得自于它的创始人 Alfred Aho、Peter Weinberger和 Brian Kernighan姓氏的首个字母。实际上 AWK的确拥有自己的语言: AWK程序设计语言,三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。
2格式
awk'{pattern + action}' {filenames}
尽管操作可能会很复杂,但语法总是这样,其中 pattern表示 AWK在数据中查找的内容,而 action是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。
awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。
通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。
3调用awk
有3种方式调用awk
1.命令行方式
awk [-F field-separator] 'commands' input-file(s)
其中,commands是真正awk命令,[-F域分隔符]是可选的。 input-file(s)是待处理的文件。
在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。
2.shell脚本方式
将所有的awk命令插入一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,一遍通过键入脚本名称来调用。
相当于shell脚本首行的:#!/bin/sh
可以换成:#!/bin/awk
3.将所有的awk命令插入一个单独文件,然后调用:
awk -fawk-script-file input-file(s)
其中,-f选项加载awk-script-file中的awk脚本,input-file(s)跟上面的是一样的。
4 awk处理流程
【1】读入第一行,并将第一行的数据填入 $0, $1, $2.... 等变量当中;
【2】依据 "条件类型"的限制,判断是否需要进行后面的 "动作";
【3】做完所有的动作与条件类型;
【4】若还有后续的『行』的数据,则重复上面 1~3 的步骤,直到所有的数据都读完为止。
经过这样的步骤,你会晓得, awk是『以行为一次处理的单位』,而『以栏位为最小的处理单位』。好了,那么 awk怎么知道我到底这个数据有几行?有几栏呢?这就需要 awk的内建变量的帮忙啦~
5语法
5.1内置变量
awk有许多内置变量用来设置环境信息,这些变量可以被改变,下面给出了最常用的一些变量。
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名
FNR 浏览文件的记录数
FS 设置输入域分隔符,等价于命令行 -F选项
NF 浏览记录的域的个数
NR 已读的记录数,即目前 awk所处理的是『第几行』数据
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符
5.2数组
为awk中数组的下标可以是数字和字母,数组的下标通常被称为关键字(key)。值和关键字都存储在内部的一张针对key/value应用hash的表格里。由于hash不是顺序存储,因此在显示数组内容时会发现,它们并不是按照你预料的顺序显示出来的。数组和变量一样,都是在使用时自动创建的,awk也同样会自动判断其存储的是数字还是字符串。一般而言,awk中的数组用来从记录中收集信息,可以用于计算总和、统计单词以及跟踪模板被匹配的次数等等。
5.3条件语句
awk中的条件语句是从C语言中借鉴过来的,可控制程序的流程
5.4循环语句
awk有三种循环:while循环;for循环;specialfor循环
5.5函数
内建函数
自定义函数
6示例
$cat/etc/passwd |awk -F':' '{print $1"\t"$7}'
$awk-F:'/root/' /etc/passwd
$awk-F:'/root/{print $7}' /etc/passwd
转自:
《linux awk命令详解》
《linux awk完全手册》
- linux awk 命令应用
- linux命令之awk
- Linux awk命令详解
- Linux awk命令详解
- linux shell awk 命令
- linux awk 命令应用
- Linux awk命令详解
- Linux awk命令详解
- Linux awk命令详解
- Linux awk命令详解
- Linux awk 命令
- Linux awk 命令 说明
- Linux awk 命令 说明
- Linux awk命令详解
- linux awk命令
- linux awk命令详解
- linux awk命令
- Linux awk 命令 说明 .
- POJ 2262 Goldbach's Conjecture
- 创建对象与使用对象——谈谈工厂的作用
- 剑指offer题解 数组中只出现一次的数字
- Java学习笔记(1)Introduction to Computers, Programs, and Java
- windows编程之进程枚举的三种方式
- Linux awk命令
- cocos-lua-Nodex
- cocos-lua-spriteex
- 【leetcode】113Path Sum II(DFS输出路径)
- HDU Divided Land(Java大数,二进制大数最大公约数)
- Android:如何把一个应用添加到Settings列表中...
- 用正则表达式提取单个页面文件里Email地址的简单实现
- <Android 基础(六)> ActionBar
- java实现gif动画效果(java显示动态图片)