awk 命令使用入门
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 命令使用入门的更多相关文章
- Linux Shell脚本入门--awk命令详解
简单使用: awk :对于文件中一行行的独处来执行操作 . awk -F :'{print $1,$4}' :使用‘:’来分割这一行,把这一行的第一第四个域打印出来 . 详细介绍: AWK命令介绍 ...
- linux awk命令详解
linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...
- AWK命令学习
使用方法 awk 'pattern {action}' {filenames} 尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到 ...
- awk 命令
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各 ...
- [Linux] linux awk命令详解
reference : http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html 简介 awk是一个强大的文本分析工具,相对于g ...
- awk命令简单介绍
简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...
- Linux的awk命令
简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...
- awk命令--update20150120
简介 awk是一个强大的文本分析工具,把文件逐行读入,以空格为默认分隔符分割成field,切开的部分再进行各种分析处理. 模式和动作: 任何awk语句都是由模式和动作组成,模式部分决定动作语句何时触发 ...
- Linux awk命令详解??????????(研究)
http://blog.chinaunix.net/uid-25120309-id-3801250.html 一. AWK 说明 awk是一种编程语言,用于在linux/unix下对文本和数据进行 ...
随机推荐
- [256个管理学理论]004.鲶鱼效应(Catfish Effect)
鲶鱼效应(Catfish Effect) 来自于大洋彼岸的让你看不懂的解释: 鲶鱼效应(Catfish Effect):鲶鱼在搅动小鱼生存环境的同时,也激活了小鱼的求生能力.鲶鱼效应是采取一种手段或措 ...
- [Objective-C] 010_Foundation框架之NSSet与NSMutableSet
在Cocoa Foundation中的NSSet和NSMutableSet ,和NSArray功能性质一样,用于存储对象属于集合.但是NSSet和NSMutableSet是无序的, 保证数据的唯一性, ...
- 在线编写复杂的数学公式--EdrawMath
网址: EdrawMath , 非常好用
- Rocket - diplomacy - LazyModule
https://mp.weixin.qq.com/s/FBU8fE4u9-UK6mRGQOlvbQ 介绍LazyModule的实现. 1. children LazyModu ...
- DOM、事件面试题
1.DOM 事件级别有哪些? DOM0 a. 通过定义执行函数 element.onclick = function (){ } b. 直接在标签中添加执行语句 Onclick = '语句' 优点:很 ...
- Java 从入门到精通-反射机制
导读 Java反射机制是开发者迈向结构化开发的重要一步,同时掌握了反射机制也就掌握了所有框架的核心实现思想. 认识反射机制 简单例子 通过以上的程序就会发现,除了对象的正向处理操作之外,还可以通过ge ...
- Java实现 LeetCode 233 数字 1 的个数
233. 数字 1 的个数 给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数. 示例: 输入: 13 输出: 6 解释: 数字 1 出现在以下数字中: 1, 10, 11, 1 ...
- Java实现 LeetCode 49 字母异位词分组
49. 字母异位词分组 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", & ...
- Java实现 LeetCode_0038_CountandSay
package javaLeetCode.primary; import java.util.Scanner; public class CountandSay_38 { public static ...
- Python面试常用的高级用法,怎么动态创建类?
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第16篇文章,今天我们来聊聊Python当中的元类. 元类是Python当中的高级用法,如果你之前从来没见过这个术语 ...