Unix命令行下输入的命令是文本,输出也都是文本。因此,掌握Unix文本处理工具是很重要的一种能力。awk是Unix常用的文本处理工具中的一种,它是以其发明者(Aho,Weinberger和Kernighan)的名字首字符命名的,是一种基于模式匹配检查输入然后将期望的匹配结果处理后输出到屏幕的文本数据处理工具。

1、awk命令格式

awk ‘模式 {操作}’ 文件1 文件2 ……

awk命令的工作过程是这样的:对于每一个输入文件,逐行对其进行检查,如果该行和awk命令参数的‘模式’部分匹配,则对该行执行命令参数‘{操作}’部分所代表的操作。下面是一个简单的例子:

$cat awk_test.txt
1 a a,b,d,f
2 b alsdjf,apple,kdjf
3 c 163.2.201.1
4 d www.google.com
5 e http://blog.csdn.net/xia7139
$awk 'NR==1{print}' awk_test.txt
1 a a,b,d,f

上面的例子中,用awk命令输出了awk_test.txt文件的第一行,其中命令的模式部分所用的NR是awk命令的内建变量,代表文件的行号。这样,便可以对所有行号为1的行进行打印输出。

2、常用的内建变量

变量 含义
NR 当前处理行的行号
FS 字段分隔,默认为空格或TAB
$n 当前处理行的第n个字段
$0 当前处理行的全部内容

这里要解释下字段的含义:在awk的使用中,字段分隔符将文件的一行分隔为各个部分,每一个部分称为一个字段,从左到右分别为第1个字段,……,第n个字段,其中,第0个字段是指这一整行。字段分隔符如果没有特殊指定,则默认为空格或tab制表符。

3、几个例子及其输出

下面的例子都是对上文中的awk_test.txt文件的操作。

按行号操作:
(1)打印文件的1-3行
$awk 'NR==1,NR==3{print}' awk_test.txt
1 a a,b,d,f
2 b alsdjf,apple,kdjf
3 c 163.2.201.1
(2)打印文件的第1行和第3行
$awk 'NR==1||NR==3{print}' awk_test.txt
或者是
$awk '(NR==1)||(NR==3){print}' awk_test.txt
1 a a,b,d,f
3 c 163.2.201.1
(3)只打印奇数行(偶数行)
$awk '(NR%2)==1{print}' awk_test.txt
1 a a,b,d,f
3 c 163.2.201.1
5 e http://blog.csdn.net/xia7139
$awk '(NR%2)==0{print}' awk_test.txt
2 b alsdjf,apple,kdjf
4 d www.google.com 使用正则表达式:
(1)打印包含2的行
$awk '/2/{print}' awk_test.txt
2 b alsdjf,apple,kdjf
3 c 163.2.201.1
(2)打印以com结尾的行
$awk '/com$/{print}' awk_test.txt
4 d www.google.com 指定分隔,输出指定字段:
(1)打印第1-3行的第一个字段和第三个字段
$awk 'NR==2,NR==3{print $1,$3}' awk_test.txt
1 a,b,d,f
2 alsdjf,apple,kdjf
3 163.2.201.1
(2)指定分隔符为.,输出第二个字段为csdn的行的第三个字段和整行
$awk -F. '$2=="csdn"{print $3,$0}' awk_test.txt
net/xia7139 5 e http://blog.csdn.net/xia7139

Unix文本处理工具之awk的更多相关文章

  1. awk、sed、grep三大shell文本处理工具之awk的应用

    awk 1.是什么 是一个编程语言.支持变量.数组.函数.流程控制(if...else/for/while) 单行程序语言. 2.工作流程 读取file.标准输入.管道给的数据,从第一行开始读取,逐行 ...

  2. Linux Shell 文本处理工具集锦--Awk―sed―cut(row-based, column-based),find、grep、xargs、sort、uniq、tr、cut、paste、wc

    本文将介绍Linux下使用Shell处理文本时最常用的工具:find.grep.xargs.sort.uniq.tr.cut.paste.wc.sed.awk:提供的例子和参数都是最常用和最为实用的: ...

  3. AWK文本处理工具(Linux)

    AWK文本处理工具(Linux) PS:刚开始实习,就给了个处理百万级别数据的任务,以前学过SHELL的一些东西sed/awk之类的处理,但是也没有具体的应用,只是在10几行10几列的小数据操作过,所 ...

  4. Pyp 替代sed,awk的文本处理工具

    Linux上文本处理工具虽不少,像cut,tr,join,split,paste,sort,uniq,sed,awk这些经典工具让人眼花缭乱,而且都太老了,使用方法都不太人性化,尤其awk,语法简直反 ...

  5. Linux - awk 文本处理工具一

    AWK AWK是一个优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一:awk经过改进生成的新的版本nawk,gawk,现在默认linux系统下日常使用的是gawk,用命 ...

  6. 三大文本处理工具grep、sed及awk的简单介绍

    grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更 ...

  7. 【Linux】 字符串和文本处理工具 grep & sed & awk

    Linux字符串&文本处理工具 因为用linux的时候主要用到的还是字符交互界面,所以对字符串的处理变得十分重要.这篇介绍三个常用的字符串处理工具,包括grep,sed和awk ■ grep ...

  8. Linux的文本处理工具浅谈-awk sed grep

    Linux的文本处理工具浅谈 awk   老大 [功能说明] 用于文本处理的语言(取行,过滤),支持正则 NR代表行数,$n取某一列,$NF最后一列 NR==20,NR==30 从20行到30行 FS ...

  9. Linux 文本处理工具grep,sed,awk

    grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更 ...

随机推荐

  1. javascript真的是异步的吗?且看setTimeout的实现原理以及setTimeout(0)的使用场景

    在今天之前我一直以为setTimeout这个函数是异步的,无意中看到了一篇关于setTimeout的文章.发现自己曾经的认识全是错误的,赶紧总结下. 先看一段代码: var start = new D ...

  2. Swift - 禁用UIWebView和WKWebView的下拉拖动效果

    使用UIWebView或WKWebView加载网页时,如果页面处于最顶端时,用户用手指往下拖动,会露出灰色空背景.同样页面在最底部的时候,继续向上拖动,下方也会露出空背景. 要禁止这个拖动效果,可进行 ...

  3. jquery 中获取URL参数的方法

    今天写项目需要获取url后面的参数ref参数来判断是否开启计时器来刷新页面,之前一直都是用JS写的,今天在查资料的时候看到了一款JQ的插件 项目地址:https://github.com/allmar ...

  4. 终于懂了:WM_PAINT中应该用BeginPaint与EndPaint这两个api,它们的功能正是使无效区域恢复(所以WM_PAINT里即使什么都不做,也必须写上BeginPaint与EndPaint)——Delphi里WM_PAINT消息的三个走向都做到了这一点 good

    程序本来是想实现鼠标单击改变背景颜色.可是,程序运行时,为什么没有任何消息触发,背景颜色就一直不断的改变了?WM_PAINT怎么被触发的 #include <windows.h> #inc ...

  5. UIViewController加载过程

    UIViewController是视图和数据的桥梁,UIViewController是所有controller的基类,ios内置了很多试图控制器,如导航控制器,tableViewController等 ...

  6. duck

    http://bjdw.artgooo.com/event/rubber/duck.shtml

  7. 浏览器打开URL的方式和加载过程

    不同浏览器的工作方式不完全一样,大体上,浏览器的核心是浏览器引擎,目前市场占有率最高的几种浏览器几乎都使用了不同的浏览器引擎:IE使用的是Trident.Firefox使用的是Gecko.Safari ...

  8. Freemarker概念简单介绍

    Freemarker概念简单介绍 1.   Freemarker是什么 模板引擎:一种基于模板的,用来生成输出文本的通过工具. 基于java开发包和类库 2.   Freemarker能做什么 MVC ...

  9. linux-shell脚本命令之sed

    [ sed简单介绍: ] sed是一个非常好的文件处理工具, 它本身是一个管道命令, 以行为单位进行处理, 能够用于对数据行进行新增.选取.替换.删除等操作. sed命令行格式:sed [-nefri ...

  10. ufldl学习笔记和编程作业:Feature Extraction Using Convolution,Pooling(卷积和汇集特征提取)

    ufldl学习笔记与编程作业:Feature Extraction Using Convolution,Pooling(卷积和池化抽取特征) ufldl出了新教程,感觉比之前的好,从基础讲起.系统清晰 ...