# GNU的awk的使用【以行为处理单位】
# 目录
[toc]
# sed和awk对比
awk是Linux下面的一个命令行工具,相比于sed,awk不仅可以以行为单位进行处理文件,还能以列为单位处理文件;
同时,它还是一种编程语言,用来在Linux/Unix下对文本和数据进行处理,数据既可以来自标准输入,也可以来自一个或者多个文件。
处理文件的方式:awk处理文本和数据的方式和sed相似,都是逐行扫描文件,从第一行到最后一行,
# awk的工作流程
# 学习的架构-5大部分
- 格式
# 格式
$ awk [-F 域分隔符号] 动作 文件名
1
2
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
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
2
3
# 参考资料
- awk 入门教程, 阮一峰 (opens new window):https://www.ruanyifeng.com/blog/2018/11/awk.html