Linux 下处理和分析文本文件内容,AWK 命令是一个强有力的工具。特别是文件内容是以行和列的形式排版的时候,AWK 就是命令行界的 Excel 啊!

简单的 awk 命令可以直接在命令行中使用,复杂情况下就得写 awk 脚本来解决了。

awk 命令基本用法:

awk 'pattern {action}' input-file > output-file

这个命令的简单解释就是:遍历输入文件 input-file 内容的每一行,在符合模式 pattern 的行上执行动作 action,并将执行结果写入 output-file 文件。

如果省略了 pattern 模式的话,每一行都将执行动作 action。例如:

awk '{ print $5 }' table1.txt > output1.txt

这句命令的意思就是输出文件 table1.txt 每行内容的第五列到文件 output1.txt。默认情况下,每列以空格符或者 tab 符(也叫做空白符)分割。因此,如果文件 table1.txt 内容是这样的话:

  1. 1, Justin Timberlake, Title 545, Price $7.30
  2. 2, Taylor Swift, Title 723, Price $7.90
  3. 3, Mick Jagger, Title 610, Price $7.90
  4. 4, Lady Gaga, Title 118, Price $7.30
  5. 5, Johnny Cash, Title 482, Price $6.50
  6. 6, Elvis Presley, Title 335, Price $7.30
  7. 7, John Lennon, Title 271, Price $7.90
  8. 8, Michael Jackson, Title 373, Price $5.50

那么,运行该命令后文件 output1.txt 的内容便如下:

  1. 545,
  2. 723,
  3. 610,
  4. 118,
  5. 482,
  6. 335,
  7. 271,
  8. 373,

如果分隔符不是空格符或者 tab 符的话,你可以在命令中指定它:

awk -F, '{ print $3 }' table1.txt > output1.txt

该条命令就会选择文件 table1.txt 内容的每行的第三列输出到文件 output1.txt 中,其中每列的分隔符为逗号。所以,文件 output1.txt 的内容便是这样了:

  1. Title 545
  2. Title 723
  3. Title 610
  4. Title 118
  5. Title 482
  6. Title 335
  7. Title 271
  8. Title 373

在花括号中间的内容即(print $3)叫做代码区。如果在代码区前面放一个条件表达式的话,代码区的代码只会在条件表达式成立时执行:

awk '$7=="\$7.30" { print $3 }' table1.txt > output1.txt

这条命令的意思就是,只有某行第七列等于 $7.30 时,才会将该行第三列内容输出到文件 output1.txt 中。$7.30 前的反斜杠是为了阻止系统将其解释为变量 $7,加上反斜杠后其仅仅被解释为普通字符串。该命令输出如下:

  1. Timberlake,
  2. Gaga,
  3. Presley,

我们也可以把一个正则表达式当做条件表达式。例如:

awk '/30/ { print $3 }' table1.txt > output1.txt

在两个反斜杠之间的内容便是正则表达式。也就是说,只有某行包含字符串“30”时,才会将该行的第三列输出到文件 output1.txt 中。其输出如下:

  1. Timberlake,
  2. Gaga,
  3. Presley,

如果文件内容某列全数字的话也可以使用它们进行计算:

awk '{ print ($2 * $3) + $7 }' table1.txt

现在第一列我们使用 $1,第二列使用 $2,那么有没有 $0 呢?当然是有的啦,$0 就表示一个完整的行内容,还有变量 NF 就表示每行的列数呢!所以所有文件 table1.txt 每行每列都是数字的话,我们可以这样进行每行累加求和:

awk '{ sum=0; for (col=1; col<=NF; col++) sum += $col; print sum; }' table1.txt

当然了,说起 awk 我们不用忘了它的好兄弟 sed 命令,那么下次就来说说 sed 命令吧!

参考

https://www.lifewire.com/write-awk-commands-and-scripts-2200573

http://man.linuxde.net/awk

awk 命令使用入门的更多相关文章

  1. Linux Shell脚本入门--awk命令详解

    简单使用: awk :对于文件中一行行的独处来执行操作 . awk -F :'{print $1,$4}'   :使用‘:’来分割这一行,把这一行的第一第四个域打印出来 . 详细介绍: AWK命令介绍 ...

  2. linux awk命令详解

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

  3. AWK命令学习

    使用方法 awk 'pattern {action}' {filenames} 尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到 ...

  4. awk 命令

    awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各 ...

  5. [Linux] linux awk命令详解

    reference : http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html 简介 awk是一个强大的文本分析工具,相对于g ...

  6. awk命令简单介绍

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

  7. Linux的awk命令

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

  8. awk命令--update20150120

    简介 awk是一个强大的文本分析工具,把文件逐行读入,以空格为默认分隔符分割成field,切开的部分再进行各种分析处理. 模式和动作: 任何awk语句都是由模式和动作组成,模式部分决定动作语句何时触发 ...

  9. Linux awk命令详解??????????(研究)

    http://blog.chinaunix.net/uid-25120309-id-3801250.html 一.  AWK 说明  awk是一种编程语言,用于在linux/unix下对文本和数据进行 ...

随机推荐

  1. BFC与优雅降级 渐进增强——学习笔记

    BFC(块级格式化上下文) BFC(Block formatting context) 直译为"块级格式化上下文". 元素的显示模式 我们前面讲过 元素的显示模式 display. ...

  2. SDP架构初识

    实现零信任的框架主要有SDP和Google Beyondcorp模型,前者出现在乙方的安全解决方案中,后者多作为甲方落地零信任的参考.本文主要记录对SDP技术的一些初步认识. 一.SDP简介 SDP是 ...

  3. Maven快速入门(三)Maven的坐标和仓库

    之前通过一个helloworld的例子来说一说如何创建maven项目以及maven项目的项目结构,然后讲maven如何编译运行项目.接下来介绍maven中几个比较重要的概念:坐标和仓库.Maven快速 ...

  4. 50个SQL语句(MySQL版) 建表 插入数据

    本学期正在学习数据库,前段时间老师让我们做一下50个经典SQL语句,当时做的比较快,有一些也是百度的,自我感觉理解的不是很透彻. 所以从本篇随笔开始,我将进行50个经典SQL语句的复盘,加深理解. 答 ...

  5. vnc安装 VNC的安装以及使用[转]

    VNC (Virtual Network Console)是虚拟网络控制台的缩写.它 是一款优秀的远程控制工具软件,由著名的 AT&T 的欧洲研究实验室开发的.VNC 是在基于 UNIX 和  ...

  6. Rocket - debug - TLDebugModuleInner - Program Buffer

    https://mp.weixin.qq.com/s/kjhJJ3moRQzxHt6pJOXEgg 简单介绍TLDebugModuleInner中Program Buffer寄存器的实现. 1. pr ...

  7. Rocket - diplomacy - AddressDecoder

    https://mp.weixin.qq.com/s/UHGq74sEd9mcG5Q3f-g3mA   介绍AddressDecoder的实现.   ​​ 1. 基本定义   ​​ 每个Port包含多 ...

  8. DataGuard VS Beedup & GoldenGate灾备方案参数对比

    世上本无完美产品,只有合适的才是最好的! 用户重视灾备数据站点的建设,毋庸置疑必备品.如果考虑带宽及事务完整性保证,存储灾备和操作系统级灾备局限性显而易见. 商用价值一般用于解决数据库自带辅助功能的短 ...

  9. Java实现 LeetCode 304 二维区域和检索 - 矩阵不可变

    304. 二维区域和检索 - 矩阵不可变 给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2). Range Sum Qu ...

  10. Java实现大整数乘法

    1 问题描述 计算两个大整数相乘的结果. 2 解决方案 2.1 蛮力法 package com.liuzhen.chapter5; import java.math.BigInteger; publi ...