分享

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

 生物_医药_科研 2019-01-23

今天介绍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及以后的学号的姓名

注:不知道你是不是发现了第一行是”Name”字段也被输出了,这是为啥呢?原来字母和数字进行比较,会按照ASCII码的大小进行比较。因此,这里要提醒使用条件表达式时,被比较的字段的数据类型最好一致。 


2.7

逻辑运算符 && || 

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


# 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是逐行处理工具,若需要更复杂的文本处理,建议使用脚本语言处理。


供稿:刘利峰

编辑:鲁淑妮


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多