在 linux 系统中,有三个强大的文本分析处理工具:grep sed awk,其中 grep 主要用于搜索文本中的内容, sed 用于编辑,而 awk 主要用于处理和生成报表。
awk 的工作原理是将文件中的内容逐行读入,然后以空格为分隔符将这一行数据切分成几列,再对每列的元素进行各种分析处理。
下面结合实例简单介绍 awk 命令常用的几种格式:
假设文件 form.txt 中有如下内容:
Num Name Company Product 1 Jobs Apple iPhone 2 Jack Alibaba taobao 3 Pony Tencent wechat
1. 打印第二列和第三列:
awk '{print $2 $3}' form.txt
>> NameCompany JobsApple JackAlibaba PonyTencent
可以看到第二列和第三列就打印出来了,但是两列数据紧贴在一起,如果我们希望以制表符来分隔开:
awk '{print $2"\t"$3}' form.txt
>> Name Company Jobs Apple Jack Alibaba Pony Tencent
2. 打印出第 2,3,4 行的第二列和第三列,以制表符分隔开:
awk '/^[0-9]/{print $2"\t"$3}' form.txt >> Jobs Apple Jack Alibaba Pony Tencent
这里用到了 awk 的一种常用语法: awk ‘ 样式{命令}’ file
表示从文件 file 中取出那些符合 “样式” 的行,然后对这些行执行{命令}
所以上面这个例子就表示:取出那些以数字开头的行,打印这些行的第二列和第三列,以制表符分隔开
3. 打印出前三行的第二列:
awk '{ if (NR<=3) {print $2"\t"$3} }' form.txt >> Name Company Jobs Apple Jack Alibaba
这里用到了 awk 编程,在花括号内写了一小段程序,awk 编程基本都是借鉴 C 语言,所以 C 语言中常见的
|------------------------------------------|