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. [PHP插件教程]001.Pear包管理器

    PEAR是PHP扩展与应用库(the PHP Extension and Application Repository)的缩写.它是一个PHP扩展及应用的一个代码仓库. 简单地说,PEAR之于PHP就 ...

  2. MRCTF 2020 WP

    MRCTF 2020 WP 引言 周末趁上课之余,做了一下北邮的CTF,这里记录一下做出来的几题的WP ez_bypass 知识点:MD5强类型比较,is_numeric()函数绕过 题目源码: I ...

  3. while与do-while循环的使用

    /* 1.格式: ①初始化条件 while(②循环条件){ ④循环体 ③迭代条件 } 2.for循环与while可以相互转换的 . */ public class TestWhile { //100以 ...

  4. 【JVM】垃圾回收的四大算法

    GC垃圾回收 JVM大部分时候回收的都是新生代(伊甸区+幸存0区+幸存1区).按照回收的区域可以分成两种类型:Minor GC和Full GC(MajorGC). Minor GC:只针对新生代区域的 ...

  5. 通过link的preload进行内容预加载

    Preload 作为一个新的web标准,旨在提高性能和为web开发人员提供更细粒度的加载控制.Preload使开发者能够自定义资源的加载逻辑,且无需忍受基于脚本的资源加载器带来的性能损失. <l ...

  6. Rocket - util - Counters

    https://mp.weixin.qq.com/s/q7R2Dn9p9cch_ABN4raReQ   介绍几种计数器的实现,以及其中的一点小细节.   ​​   1. ZCounter   ​​   ...

  7. Java获取当前时间到凌晨12点剩余秒数

    有个获取登陆用户是否每天第一次登陆系统需求,考虑不需要入库操作,就用redis设置key每天凌晨0点删除 /** * 获取当前时间到凌晨12点的秒数 * @return */ public Long ...

  8. Java实现 LeetCode 815 公交路线(创建关系+BFS)

    815. 公交路线 我们有一系列公交路线.每一条路线 routes[i] 上都有一辆公交车在上面循环行驶.例如,有一条路线 routes[0] = [1, 5, 7],表示第一辆 (下标为0) 公交车 ...

  9. Android如何使用SQLlite数据库

    先写一个类,继承自SQLiteOpenHelper public class MyDatabaseHelper extends SQLiteOpenHelper { //声明一个Context pri ...

  10. FPGA之SPI SD卡读操作

    这几天在FPGA调试与SD通信,读SD卡里的图片,之前接触32时没有去研究过SD卡,不太熟悉操作流程,在网上找了很多资料,也看了几个32开发板的资料,但大多数都讲得不是特别清楚,只能瞎操作了一番,在别 ...