ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

AWK 学习笔记

2020-08-29 07:01:00  阅读:191  来源: 互联网

标签:输出 指定 笔记 学习 awk 一行 分隔符 AWK 空格


1、简介:
awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。它支持用户自定义 函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk的处理文本和数据的方 式是这样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。如果没有指定处理动作,则把匹配的行显示到标 准输出(屏幕),如果没有指定模式,则所有被操作所指定的行都被处理。awk分别代表其作者姓氏的第一个字母。因为它的作者是三个人,分别是Alfred Aho、Brian Kernighan、Peter Weinberger。gawk是awk的GNU版本,它提供了Bell实验室和GNU的一些扩展。

2、语法:
awk [选项参数] ‘script’ var=value file(s)

awk [选项参数] -f scriptfile var=value file(s)
使用方法:
awk ‘{pattern + action}’ {filenames} # pattern 表示AWK在数据中查找的内容,而action 是在找到的匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,是用于根据特定的模式对一系列指令进行分组。pattern 就是要表示的正则表达式,用斜杠括起来。
通常,awk是以文件的一行为处理单位。awk每接受文件的一行,然后执行相应的命令,来处理文本。
在awk中,花括号用于将几块代码组合到一起,这一点类似于C语言。

894466653.png

-F参数:指定分隔符,可以指定一个或多个。
NF :用来记录一行中有多少个字段
NR:记录数量,一行就是一个记录。

例子:
cat test
i am a student ;
you are a teacher;

awk -F “ “ ‘{print $2}’ test
则输出:
am
are
解释:-F后面指定” “ 空格为分隔符; $2,表示第2个字段; test :表示是文件名。
awk会根据空格和制表符,将每一行分成若干字段,依次用$1 $2 $3 代表第一个字段、第二个字段、第三个字段。

3、变量
除了 $+数字 表示某个字段,awk 还提供了其他一些变量
变量NF:表示当前行有多少个字段,因此 $NF 表示一行的最后一个字段;
print 命令里面的逗号,表示输出的时候,两个部分之间使用空格分隔。
变量NR:表示当前处理的是第几行
print命令里面,如果原样输出字符,要放在双引号里面。

208134308.png

awk 的其他内置变量如下:
FILENAME:当前文件名
FS:字段分隔符,默认是空格和制表符。
RS:行分隔符,用于分隔每一行,默认是换行符。
OFS:输出字段的分隔符,用于打印是分隔字段,默认为空格。
ORS:输出记录的分隔符,用于打印时分隔记录,默认为换行符。
OFMT:数字输出的格式,默认为:%6.6g

4、函数
awk 提供了内置函数,方便对原始数据的处理
常用的函数:
toupper(): 字符转为大写
tolower():字符转为小写
length():返回字符串长度
substr():返回子字符串
sin():正弦
cos():余弦
sqrt():平方根
rand():随机数

644512302.png


5、条件
awk 允许指定输出条件,只输出符合条件的行。
输出条件要写在动作的前面。
awk ‘条件 动作’ 文件名

1012975074.png


6、if语句
awk 提供了if结构,用于编写复杂的条件。不仅可以指定if,还可以指定else部分。举例如下:

3071448468.png

AWK 运算符:

3047896083.png


标签:输出,指定,笔记,学习,awk,一行,分隔符,AWK,空格
来源: https://blog.51cto.com/5001660/2525510

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

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

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

ICode9版权所有