awk 命令

2019-07-11  本文已影响0人  pipu

awk 命令

awk 是用来管理数据和生成报告的脚本语言,awk命令行编程不需要编译,允许用户使用变量,数学方法,字符串方法和逻辑运算。

awk是一个命令行工具,它可以让程序员以语句的形式编写简短但强有效的程序,这些语句是在整个文档每一行搜索的过程中,用来定义用于搜索的文本表达式,也可以定义当该行中含有匹配元素时采取的操作。awk通常被用于表达式搜索和处理。他搜索一个或多个文件来查看他们是否含有特定表达式的行,然后采取相关的操作。

awk 是开发者名字的简写--Aho,Weinberger和Kernighan

awk可以用来做什么

1.awk 操作

2.用处

3.编程结构

语法

awk options '选择标准 {操作}' 输入文件 > 输出文件

选项options

例子

下面的例子中的文件都是由下面代码创建的

cat > 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 

1.awk 默认行为 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

在上面命令中,没有给出选择表达式。所以每一行都调用了该动作。print 操作没有参数会打印整行,整个文件都被打印了。

2.打印匹配行
awk '/manager/ {print}' employee.txt

结果

  ajay manager account 45000
  varun manager sales 50000
  amit manager account 47000

打印匹配manager的行

3.将一行分割成字段

对于每一个记录行,awk程序会将一行用分隔符分割(默认是空格),并将每个字段存入n中,比如一行中有四个单词,那么将会被存储在1,2,3和4中,0表示整行

a·wk '{print $1,$4}' employee.txt

结果:

ajay 45000
sunil 25000
varun 50000
amit 47000
tarun 15000
deepak 23000
sunil 13000
satvik 80000

1和4分别代表了名字和薪水字段

awk内置变量

awk的内置变量包括n,(0,1,2...),还包括以下变量

变量的例子

NR展示行号
 awk '{print NR,$0}' employee.txt 

结果

1   ajay manager account 45000
2   sunil clerk account 25000
3   varun manager sales 50000
4   amit manager account 47000
5   tarun peon sales 15000
6   deepak clerk sales 23000
7   sunil peon sales 13000
8   satvik director purchase 80000
输出3到6行
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

更多例子####

文件 geek.txt

内容:

Tarun    A12    1
Man    B6    2
Praveen    M42    3
打印行号和第一列,用‘-’分割
awk '{print NR "-" $1}' geek.txt

结果:

1-Tarun
2-Man
3-Praveen

查找最长的一行并且输出长度
awk '{ if(length($0) > max) max = length($0) } END {print max}' geek.txt

结果:

19
上一篇下一篇

猜你喜欢

热点阅读