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

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

545,
723,
610,
118,
482,
335,
271,
373,

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

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

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

 Title 545
Title 723
Title 610
Title 118
Title 482
Title 335
Title 271
Title 373

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

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

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

Timberlake,
Gaga,
Presley,

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

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

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

Timberlake,
Gaga,
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. [Python基础]006.IO操作

    IO操作 输入输出 print raw_input input 文件 打开文件 关闭文件 读文件 写文件 文件指针 实例 输入输出 输入输出方法都是Python的内建函数,并且不需要导入任何的包就可以 ...

  2. 搭建Nexus Repository包管理系统

    搭建Nexus Repository包管理系统 下载安装程序 下载Nexus Repository最新版本 配置说明 将下载后的文件传输到服务器上 #修改配置文件 vi /etc/security/l ...

  3. Parrot os KDE还是MATE版本

    在经历了KDE桌面痛苦折磨后,准备转投MATE的怀抱,不得不说Parrot KDE的ram的占有和windows 10差不多,大量的图形化处理,让我本来不多的内存更加血上加霜. 所以,关于版本的推荐, ...

  4. HDL-数字电路建模的要点

    https://mp.weixin.qq.com/s/tEDMWf1gk0e7u4hIWKM9bQ   ​​   一. 拓扑   数字电路的拓扑抽象出来之后比较简单,就是线(Wire)和开关(Swit ...

  5. js循环语句while,do..while,for

    1. while循环 while(循环条件){ 循环体语句块; } 2.do..while循环 do{ 循环体语句块; }while(循环条件) 两者区别:while先判断后执行.循环体语句可能一次都 ...

  6. Java实现 LeetCode 623 在二叉树中增加一行(遍历树)

    623. 在二叉树中增加一行 给定一个二叉树,根节点为第1层,深度为 1.在其第 d 层追加一行值为 v 的节点. 添加规则:给定一个深度值 d (正整数),针对深度为 d-1 层的每一非空节点 N, ...

  7. Java实现 LeetCode 97 交错字符串

    97. 交错字符串 给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的. 示例 1: 输入: s1 = "aabcc", s2 = " ...

  8. Java实现第九届蓝桥杯哪天返回

    哪天返回 题目描述 小明被不明势力劫持.后被扔到x星站再无问津.小明得知每天都有飞船飞往地球,但需要108元的船票,而他却身无分文. 他决定在x星战打工.好心的老板答应包食宿,第1天给他1元钱. 并且 ...

  9. java实现第二届蓝桥杯连通问题(C++)

    连通问题. BMP是常见的图像存储格式. 如果用来存黑白图像(颜色深度=1),则其信息比较容易读取. 与之相关的数据: (以下偏移均是从文件头开始) 偏移:10字节, 长度4字节: 图像数据真正开始的 ...

  10. 【Mysql】使用一条sql查询出库表结构信息

    1.新建查询 将以下脚本粘贴进去 脚本如下: SELECT TABLE_SCHEMA 库名, TABLE_NAME 表名, COLUMN_NAME 列名, COLUMN_TYPE 数据类型, DATA ...