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. VS2010 安装 Boost 库 1.54

    Boost库被称为C++准标准库, 功能很是强大, 下面记录我在VS2010中安装使用Boost库的过程. 首先上官网http://www.boost.org/下载最新的Boost库, 我的版本是1_ ...

  2. winform利用代码将控件置于顶端底端

    有时,我们可能动态的添加控件,并准备将其置于对顶层或最底层.实现的方法有两个: 一种方法是在WinForm窗体中使用Controls控件集的SetChildIndex方法,该方法将子控件设定为指定的索 ...

  3. Oracle 当前时间加减

     当我们用 select sysdate+number from dual ;我们得到的是,当前的时间加上number天后的时间.从这里我们也可以看出,使用这种方式进行时间计算的时候,计算的单位是天, ...

  4. xpath的文本获取

    xpath中tidyText()获取标签下所有文本, text()本级文本, allText()各级所有文本.

  5. 黑马程序猿_Objective C 类与协议

    <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>.& ...

  6. Swift - 正则表达式的使用(附用户名、邮箱、URL等常用格式验证)

    Swift虽然是一个新出的语言,但却不提供专门的处理正则的语法和类.所以我们只能使用古老的NSRegularExpression类进行正则匹配. 即先接受一个正则表达式的字符串,由此生成NSRegul ...

  7. MFC 窗口重绘问题

    在客户区画直线等图形时, 发现当其最小化或者其他窗口遮挡时,出现窗口重绘,而将原来绘制的图形删除,上网上搜索知道,绘制图形的代码必须放置在Ondraw函数中,才能避免重绘时图形消失(因为一直在响应WM ...

  8. 问题:Excel在“xxx.xlsx”中发现不可读取的内容。是否恢复此工作薄的内容?【原创】

    现象: 点"是(Y)" 提示信息中提到的error242440_02.xml文件: 问题重现: package poi; import java.io.FileNotFoundEx ...

  9. Eclipse和PyDev搭建完美Python开发环境(Windows篇)(转)

      摘要:本文讲解了用Eclipse和PyDev搭建Python的开发环境. 十一长假在家闲着没事儿,准备花点时间学习一下Python. 今儿花了一个下午搭建Python的开发环境,不禁感叹————开 ...

  10. Apache 服务器

    1.介绍 Apache原来用于小型或试验性Internet网络,后来逐步扩展到各种系统中,对Linux的支持几乎完美.Apache可以支持SSL技术,支持多台虚拟主机.Apache是以进程为基础的结构 ...