“ 鬼知道我为什么记得这些命令。——编程三分钟”
概述
awk
同sed
命令类似,只不过sed
擅长取行,awk
命令擅长取列。(根据了解awk
是一种语言,不过我们只关注他处理文本的功能,用的好的话几乎可以取代excel)
打印某几列
我们将字符串 I love you
通过管道传递给awk命令,相当于awk处理一个文件,该文件的内容就是I love you
,默认通过空格作为分隔符(不管列之间有多少个空格都将当作一个空格处理)I love you
就分割成三列了。.
,可以这样用
条件过滤
我们知道awk的用法是这样的,那么pattern部分怎么用呢?
$2>=90 表示如果当前行的第2列的值大于90则处理当前行,否则不处理。说白了pattern部分是用来从文件中筛选出需要处理的行进行处理的,这部分是空的代表全部处理。pattern部分可以是任何条件表达式的判断结果,例如>,<,==,>=,<=,!=
同时还可以使用+,-,*,/
运算与条件表达式相结合的复合表达式,逻辑 &&,||,!
同样也可以使用进来。另外pattern部分还可以使用 /正则/ 选择需要处理的行。
判断语句
判断语句是写在pattern{ 命令 }
命令中的,他具备条件过滤一样的作用,同时他也可以让输出更丰富
BEGIN 定义表头
使用方法如下:
这里要注意,我为了输出格式好看,做了左对齐的操作(%-8s左对齐,宽8位),printf
用法和c++
类似。
这里OFMT是个内置变量,初始化数字输出格式,保留小数点后两位。
END 添加结尾符
和BEGIN用法类似
数据计算
这个地方我要放大招了!上面的知识点你都记住了吗?
因为命令太长,末尾我用\
符号换行了。。
- BEGIN体里我输出了表头,并给四个变量初始化0
- pattern体里我输出了每一行,并累加运算
- END体里我输出了总统计结果
column -t
(鬼知道我为什么会记得这么多乱七八糟的命令。)
有用的内置变量
NF:表示当前行有多少个字段,因此$NF
就代表最后一个字段
内置函数
awk定义了很多内置函数,用awk来写shell脚本倒是一个不错的选择,但是大多数我们是用不上的,以下是常用函数
随机数,先设置种子再随机
rand() 0 <= n < 1,srand([expr]) |将 rand 函数的种子值设置为 Expr 参数的值,或如果省略 Expr 参数则使用某天的时间。
字符串
系统常用
不常用算数:
如果有帮助别忘了分享给朋友哦~