AWK 初级篇

386 查看

概述

AWK 是一种解释执行的编程语言。
它非常的强大,被设计用来专门处理文本数据。
AWK 的名称是由它们设计者的名字缩写而来 —— Afred Aho, Peter Weinberger 与 Brian Kernighan。

部分 AWK 的典型应用场景

AWK 可以做非常多的工作。 下面只是其中的一小部分:

  • 文本处理

  • 生成格式化的文本报告

  • 进行算术运算

  • 字符串操作,以及其它更多

安装

默认Linux系统中是安装 AWK 的。
使用 which 命令可以判断你当前的系统上是否安装了 AWK。

如果没有安装,可以使用 yum 包管理工具安装:

yum install gawk

which 命令确认 AWK 已成安装成功:

which awk

如果得到如下的结果,则说明你已经成功安装 awk:

/bin/awk

实战

带着问题来学习,本次解决解决下这些问题。

  • 打印出文件的内容。

  • 打印出第一列,打印出最后一列。

  • 打印出第一行,打印出最后一行。

  • 打印出指定行的指定列。

  • 以任意顺序输出列。

  • 正则表达式 匹配行开始。

  • 正则表达式 匹配行结束。

测试文本 score.txt

Aaron    Physics    87
Abel     Maths      98
Rahul    Chinese    90
Buck     Biology    87
Byron    English    85
Dave     History    89
Enoch    Chemistry  89

//打印出文件的内容。
[root@vagrant-centos65 awk]# awk '{print $0}' score.txt
Aaron    Physics    87
Abel     Maths      98
Rahul    Chinese    90
Buck     Biology    87
Byron    English    85
Dave     History    89
Enoch    Chemistry  89

//打印出第一列。
[root@vagrant-centos65 awk]# awk '{print $1}' score.txt
Aaron
Abel
Rahul
Buck
Byron
Dave
Enoch

//打印出最后一列。
[root@vagrant-centos65 awk]# awk '{print $NF}' score.txt
87
98
90
87
85
89
89

//打印出第一行。
[root@vagrant-centos65 awk]# awk 'NR==1{print $0}' score.txt
Aaron    Physics    87

//打印出最后一行。
[root@vagrant-centos65 awk]# awk 'END{print}' score.txt
Enoch    Chemistry  89

//打印出指定行的指定列。比如 第四行第二列
[root@vagrant-centos65 awk]# awk 'NR==4{print $2}' score.txt
Biology

//通过匹配模式串输出列。
[root@vagrant-centos65 awk]# awk '/b/{print $0}' score.txt
Abel     Maths      98

//以任意顺序输出列。
[root@vagrant-centos65 awk]# awk '{print $2 "\t" $1}' score.txt
Physics    Aaron
Maths    Abel
Chinese    Rahul
Biology    Buck
English    Byron
History    Dave
Chemistry    Enoch

//行开头匹配。
[root@vagrant-centos65 awk]# awk '/^A/' score.txt
Aaron    Physics    87
Abel     Maths      98

[root@vagrant-centos65 awk]# awk '/^B/' score.txt
Buck     Biology    87
Byron    English    85

//行结束匹配。
[root@vagrant-centos65 awk]# awk '/89$/' score.txt
Dave     History    89
Enoch    Chemistry  89

Thanks ~

AD :