AWK
awk是一种文本处理工具,其功能与cut类似,但是比cut强大。当然,代价是awk的计算速度不如cut。
比如说,我们想以特殊的顺序打印列内容:
cut -d',' -f17,15,18,16 flightdelays.csv
不过我们会发现,其顺序还是15,16,17,18。cut内部是不支持列元素的特殊顺序显示的!
但是用awk就可以做到:
awk -F',' '{print $17,$15,$18,$16}' flightdelays.csv
1. awk -F',' '{print $1-- $2, $3}' :-F表示分隔符,$1表示分隔符分开的第一列(特别声明下,$0代表整个行),和cut不同,列与列 之间可以添加其他元素,像这里我们添加了"--"和","。
awk内建变量(不需要在前加$)
awk的处理流程
awk的处理流程类似于一个循环语句,其对于文件的每一行逐行分析执行命令。所以,类似于以下指令:
awk '{sss+=$1} END {print sss}' test.csv
输出会是一个数字,因为print的动作只在END语句块内发生了一次,循环发生多次的是 sss+=$1。
awk的BEGIN和END语句块
某些场景下,awk语句需要有初始化或者后续的操作,这时候我们要使用BEGIN和END(需要声明,在awk中动作是在{}发生的,如果需要多个指令辅助时,可以利用分号";"间隔)
需要注意的点
1. awk的动作都要在''内发生,如果在动作内部需要打印非变量字符串,需要用双引号而非单引号。