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

最新文章

  1. 解决 PhpStorm 对 用单例模式实例化PHP类时,代码自动提示功能失效 的问题
  2. SSIS 错误
  3. question
  4. Python学习推荐
  5. [html5]placeholder默认颜色
  6. 使用BAPI_ACC_DOCUMENT_POST,创建会计凭证,用BADI扩展字段(转)
  7. meta--------link
  8. JavaScript案例开发之扑克游戏
  9. VxWorks 任务
  10. Java集合类:&quot;随机访问&quot; 的RandomAccess接口
  11. opencart3修改产品页模板没有效果的原因排查
  12. iOS 10 Programming Fundamentals with Swift 学习笔记 0
  13. Session小结
  14. 关于HashSet的equals和hashcode的重写
  15. 代理(Proxy)模式 ,桥梁(Bridge)模式
  16. 在jsp页面上打印错误堆栈
  17. C11线程管理:条件变量
  18. autofac 在.net core 与经典asp.net中的差异
  19. mysql查询最近7天的数据,没有数据自动补0
  20. Codeforces 610D Vika and Segments 线段树+离散化+扫描线

热门文章

  1. SpringBoot工程创建的三种方式
  2. java的Interger自动包装带来的问题
  3. 【Java8新特性】不了解Optional类,简历上别说你懂Java8!!
  4. CORS漏洞利用检测和利用方式
  5. 轻松实现记录与撤销——C#中的Command模式
  6. 关于ubuntu下使用l2tpvpn和远程桌面windows系统的测试
  7. 收藏!如何有效实施devops?
  8. 高性能可扩展mysql 笔记(六) SQL执行计划及分页查询优化、分区键统计
  9. java实现手机尾号评分
  10. shell命令:命令置换、进程管理