最简单地说,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