2019-01-23浏览量:243

详解!!!awk参见使用命令

今天介绍Linux常见的一个命令awk,一门模式匹配的编程语言,因为它的主要功能是用于匹配文本并处理,同时它有一些编程语言才有的语法,例如函数、分支循环语句、变量等等。当然比起我们常见的编程语言,awk相对比较简单,那我们就一起看看吧。

 awk

一.命令

awk处理过程: 

依次对每一行进行处理,然后输出。

awk命令形式:

awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file

 [-F|-f|-v] -F指定分隔符,-f调用脚本,-v定义变量 var=value

'  '   引用代码块

BEGIN   在逐行处理之前初始化代码,主要是引用全局变量,如FS设置分隔符等

//   匹配代码块,可以是字符串或正则表达式

{}   命令代码块,包含一条或多条命令

;   多条命令使用分号分隔

END   在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾摘要信息

二.各个命令注解

实例文件for_awk.txt内容如下:

2.1  -f 指定脚本文件

script.awk:内容如下

BEGIN{

FS=":"

}

{print $1}  

Ps:效果与awk 'BEGIN {FS="\t"}{print $1}' for_awk.txt相同。

2.2 -F 指定分隔符

$1 指定分隔符后,第一个字段,$0全部字段。

上面的例子也可以使用:

# 打印以”\t”为分割符的第一个字段

# 1.注意观察下面两个例子:

细心的你一定发现,在 $1和$2之间增加‘,’输出的内容之间也增加一个空格作为分隔符。

# 2. 指定OFS=’\t’设置输出各个字段符分隔符,本例以制表符作为分割。

也可以自定义输出,注意引号的使用。

#3. NF:表示每行有的字段数,注意这里的字段数是被–F分割后的部分数。

# 4. NR:表示当前行的行号。

2.3–v设置变量

2.4// 匹配代码块

// 纯字符匹配 !// 纯字符不匹配   ~// 字段值匹配

!~// 字段值不匹配   ~/a1|a2/ 字段值匹配a1或a2 

# 1.纯字符(不)匹配

注:匹配含有指定字符’lisi’的行。

注:匹配不含有指定字符’lisi’的所有行。

 # 2.字段值(不)匹配

注:指定字段’$4’匹配含有指定字符’107'的所有行。

注:指定字段’$4’匹配不含有指定字符’107’的所有行。

# 3.正则表达式在匹配中的应用

注:指定字段’$4’匹配指定字符’107’或’108’的所有行。

注:结合正则表达式使用。

2.5.IF 语句 

整个if语句必须用在{}中,且比较内容用()扩起来

# 1.第一个字段匹配’wanger’,打印整行,否则,打印”None”

# 2.输出文件的空白行

注:^$ 正则表达式使用。^表示行首;$表示行尾。

# 3.某文件夹下所有文件的大小

2.6.条件表达式

== 相等  != 不等  > 大于  >= 大于等于  <小于  <= 小于等于

# 1.打印姓名为lisi的学号

 

# 2. 打印学号为201802以后的学号的姓或”w”开头的姓名

2.8.数值运算

减法乘除,幂,取整等【+, -, *, /, **, int()】

应用1

awk -F'[\t#]' '{print NF}'  for_awk.txt   

# 指定多个分隔符\t,#,输出每行多少字段

awk -F'[\t#]' '{print $1,$2 }' OFS='\t' for_awk.txt

# 制表符分隔输出多字段

应用2

打印输出第一个字段出现次数为1次的字段。

思考:出现的次数大于1次呢?

awk -F "\t" '{print $1}' for_awk.txt |sort|uniq -c|grep –v "1"

满满的收获

通过上面的介绍,你是不是get到这项技能了呢?

如果还不太熟悉,那就新建一个类似的文档,练习起来吧!

另外,awk是逐行处理工具,若需要更复杂的文本处理,建议使用脚本语言处理。

下一篇