# GNU的awk的使用【以行为处理单位】

# 目录

[toc]

# sed和awk对比

awk是Linux下面的一个命令行工具,相比于sed,awk不仅可以以行为单位进行处理文件,还能以列为单位处理文件;

同时,它还是一种编程语言,用来在Linux/Unix下对文本和数据进行处理,数据既可以来自标准输入,也可以来自一个或者多个文件。

处理文件的方式:awk处理文本和数据的方式和sed相似,都是逐行扫描文件,从第一行到最后一行,

# awk的工作流程

img

# 学习的架构-5大部分

  • 格式
# 格式
$ awk [-F 域分隔符号] 动作 文件名
1
2

总结:动作都是用{ }包裹的,最最外边还是' '包裹

awk '{print $2 "--" $3}' auto-push-to-github.sh
1
  • 变量

变量NF表示当前行有多少个字段(从1开始数

变量NR表示当前处理的是第几行(从1开始数

总结:比较的时候,直接用变量,输出的时候要加上$

awk 'NR>1 {print $2 "--" $3}' auto-push-to-github.sh
1
  • 函数

awk还提供了一些内置函数,方便对原始数据的处理。

  • 条件,比如比较/正则表达式

awk允许指定输出条件,只输出符合条件的行。

$ awk '条件 动作' 文件名

# 正则表达式只输出包含usr的行。只输出包含usr的行。
$ awk -F ':' '/usr/ {print $1}' demo.txt

# 输出奇数行
$ awk -F ':' 'NR % 2 == 1 {print $1}' demo.txt
1
2
3
4
5
6
7
  • if语句

awk提供了if结构,用于编写复杂的条件。

$ awk -F ':' '{if ($1 > "m") print $1}' demo.txt

$ awk -F ':' '{if ($1 > "m") print $1; else print "---"}' demo.txt
1
2
3

# 参考资料