Blog

Make it work, make it right, make it fast

Apr 17, 2022 - 2 minute read - 编程

Linux三剑客-AWK

最简单地说,AWK是一种用于处理文本的编程语言工具。AWK在很多方面类似于Unix shell编程语言,尽管AWK具有完全属于其本身的语法。

使用

首先新建一个员工的测试文本

ajay manager account 45000
sunil clerk account 25000
varun manager sales 50000
amit manager account 47000
tarun peon sales 15000
deepak clerk sales 23000
sunil peon sales 13000
satvik director purchase 80000

使用awk进行输出

➜  ~ awk '{print}' employee.txt
ajay manager account 45000
sunil clerk account 25000
varun manager sales 50000
amit manager account 47000
tarun peon sales 15000
deepak clerk sales 23000
sunil peon sales 13000
satvik director purchase 80000

awk的命令形式

awk '<var>program</var>' <var>input-file1</var> <var>input-file2</var> …

输出指定的列

想要输出特定的列(姓名+工资)

➜  ~ awk '{print $1,$4}' employee.txt
ajay 45000
sunil 25000
varun 50000
amit 47000
tarun 15000
deepak 23000
sunil 13000
satvik 80000

awk使用$+数字表示列(默认以空格分割),$0表示当前行,$1表示第一列,以此类推。

如果想在首列加上序号,可以使用**NR(number of input records)**变量

➜  ~ awk '{print NR,$1,$4}' employee.txt
1 ajay 45000
2 sunil 25000
3 varun 50000
4 amit 47000
5 tarun 15000
6 deepak 23000
7 sunil 13000
8 satvik 80000

输出指定的行

输出特定范围的行(3-6),这里的$0代表正行元素

➜  ~ awk 'NR==3, NR==6 {print NR, $0}' employee.txt
3 varun manager sales 50000
4 amit manager account 47000
5 tarun peon sales 15000
6 deepak clerk sales 23000

条件过滤

输出工资大于30000的职工

➜  ~ awk '$4 > 30000 {print}' employee.txt
ajay manager account 45000
varun manager sales 50000
amit manager account 47000
satvik director purchase 80000

如果只想要输出manager的工资,可以使用awk的正则过滤

➜  ~ awk '/manager/ {print}' employee.txt
ajay manager account 45000
varun manager sales 50000
amit manager account 47000

参考