ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Linux文本处理三剑客之awk学习笔记02:命令行和语法结构

2021-01-19 13:02:31  阅读:191  来源: 互联网

标签:02 选项 pattern 文本处理 awk action 参数 txt 三剑客


命令行和语法结构

awk [ options ] [ -- ] program-text file ...

options即选项;program-text即awk代码;file ...即待处理的读入数据,可以是文件也可以是标准输入,只要是数据来源即可。

这里比较陌生的是[ -- ],中括号表示可以省略,在解释“--”含义之前我们先来阐述一下一个bash下命令的选项和参数。

cmd -x -u root -ppassword a.txt b.txt c.txt
  1. 选项可以有长选项和短选项,例如awk的-f和--file。
  2. 选项按照是否带有参数可以分为3种情况:
    1. 不带参数的选项。例如cat的-n选项显示行号,-n选项后面不需要(也不能)带选项参数。
    2. 必带参数的选项。例如mysql的-u选项必须带上一个用户名(mysql -u root),选项的参数是必须的。
    3. 选带参数的选项。例如mysql的-p[password]选项,如果省略了选项参数password,那么我们需要在随后的STDIN里面输入密码;否则我们就必须在选项后面立即(不能有任何空格)跟上选项参数password。
  3. 参数按照出现的位置可以分为2种情况:
    1. 选项型参数:作为选项的参数出现,例如“mysql -u root --database=XXDB”。
    2. 非选项型参数:一般表示命令的作用对象(例如文件等)或其他信息,一般处于命令的尾部或者后半部。

而前文所述的“--”用来标识选项到此结束(类似于用来标识文件结束的EOF标识),后面的字符均理解为非选项型参数(在这里即包含了awk代码和文件)。

由于选项一般都会包含中划线“-”,因此如果非选项型参数包含了这个字符,那么bash就很难理解其到底是一个选项还是一个非选项型参数。下面就是一个好的例子。

[root@c7-server ~]# grep "-v" test.txt 
^C
[root@c7-server ~]# grep -- "-v" test.txt 
abc-vabc

如果文件名包含了“-”,也可以使用该功能避免歧义。

讲完了命令行结构接下来我们来看看语法结构。由双引号包裹的awk代码中包含着诸多如下的语法结构:

pattern{action}

我们称其为规则(rule)。pattern(模式)是表达式,返回布尔值的条件判断,返回真的时候我们才执行{}中的action(动作)。action一般会对每次读入的数据进行操作,不过不是强制,纯看action是怎么写的。

awk 'BEGIN{n=3} ($4<=18){print "teen"} /Alice/{print "Alice"} END{print "hello"}' a.txt

pattern和action都可以省略,不同的省略组合搭配有不同的效果。

省略pattern:会使得每次读入的数据都满足执行action的条件。(有一些此前见过的结果或者随着博客的深入慢慢一眼就可以看出结果的,我就不再写入博客了。)

~]# awk '{print $0}' a.txt

省略{action}:等价于{print},再等价于{print $0}。

~]# awk '/Alice/' a.txt 
2   Alice   female  24   def@gmail.com  18084925203

仅省略action但是保留大括号:等价于空action,对于满足条件的数据咱啥也不干。

[root@c7-server ~]# awk '/Alice/{}' a.txt 
[root@c7-server ~]#

省略pattern+省略{action},即只剩俩单引号了:这并不会输出每次读入的数据而是啥也不干。

[root@c7-server ~]# awk '' a.txt 
[root@c7-server ~]#

rule即pattern{action}的组合可以有多个,每次读入的数据都会按照rule的出现顺序(CLI中从左往右,代码文件中从上往下)依次判断执行。同一个pattern代码块内的多个action在CLI中使用分号分隔,在代码文件中如果有换行则不需要使用分号分隔,否则需要。

pattern简述如下,而action有许许多多的指令,它们都会随着博客的深入会慢慢遇到。

# 特殊pattern
BEGIN{}
END{}

# 布尔值pattern
/REGEXP/    # 正则匹配
relational expression    # 等值比较 3>2{action}
pattern && pattern    # 逻辑与
pattern || pattern    # 逻辑或
! pattern    # 逻辑取反
(pattern)    # 优先级置顶
pattern?pattern:pattern    # 条件表达式(三目运算符)

# 非布尔值pattern
pattern1,pattern2    # 范围pattern,也称之为flip-flop

 

标签:02,选项,pattern,文本处理,awk,action,参数,txt,三剑客
来源: https://www.cnblogs.com/alongdidi/p/awkCliSyntaxStructure.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有