前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux三剑客命令之Awk

Linux三剑客命令之Awk

作者头像
民工哥
发布2020-09-16 16:56:51
1.1K0
发布2020-09-16 16:56:51
举报

命令名称

Awk pattern scanning and processing language

命令作用

对文本和数据进行处理

详细说明

awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输(stdin)、一个或多个文件,或其它命令的输出。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。

语法格式

 awk [options] 'scripts' var=value filename

常用参数

-F 指定分隔符(可以是字符串或正则表达式)

-f 从脚本文件中读取awk命令

-v var=value 赋值变量,将外部变量传递给awk

脚本基本结构

 awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' filename

一个awk脚本通常由BEGIN语句+模式匹配+END语句三部分组成,这三部分都是可选项

工作原理:

第一步执行BEGIN 语句

第二步从文件或标准输入读取一行,然后再执行pattern语句,逐行扫描文件到文件全部被读取

第三步执行END语句

实例展示:

echo "hello " | awk 'BEGIN{ print "welcome" } END{ print "2017-08-08" }'
welcome
2017-08-08
echo -e "hello" | awk 'BEGIN{ print "welcome" } {print} END{ print "2017-08-08" }'
welcome
hello

2017-08-08

#不加print参数时默认只打印当前的行

echo|awk '{ a="hello"; b="nihao"; c="mingongge"; print a,b,c; }'
hello nihao mingongge

#使用print以逗号分隔时,打印则是以空格分界

echo|awk '{ a="mgg"; b="mingg"; c="mingongge"; print a" is "b" or "c; }'
mgg is mingg or mingongge

#awk的print语句中双引号其实就是个拼接作用

Awk的变量

内置变量

$0 #当前记录

1~n #当前记录的第N个字段

FS #输入字段分隔符(-F相同作用)默认空格

RS #输入记录分割符,默认换行符

NF #字段个数就是列

NR #记录数,就是行号,默认从1开始

OFS #输出字段分隔符,默认空

ORS #输出记录分割符,默认换行符

外部变量

[mingongge@ ~]#a=100
[mingongge@ ~]#b=100
[mingongge@ ~]#echo |awk '{print v1*v2 }' v1=a v2=b
10000

Awk运算与判断

算术运算符

+ -  加减
* / & 乘 除 求余
^ *  求幂
++ -- 增加或减少,作为前缀或后缀
[mingongge@ ~]#awk 'BEGIN{a="b";print a,a++,a--,++a;}'
b 0 1 1
[mingongge@ ~]#awk 'BEGIN{a="0";print a,a++,a--,++a;}'
0 0 1 1
[mingongge@ ~]#awk 'BEGIN{a="0";print a,a++,--a,++a;}'
0 0 0 1

#和其它编程语言一样,所有用作算术运算符进行操作,操作数自动转为数值,所有非数值都变为0

赋值运算符

= += -= *= /= %= ^= **=

正则运算符

~ !~ 匹配正则表达式/不匹配正则表达式

逻辑运算符

|| && 逻辑或 逻辑与

关系运算符

< <= > >= != =

其它运算符

$ 字段引用

空格 字符串链接符

?: 三目运算符

ln 数组中是否存在某键值

Awk正则

^ 行首定位符

$ 行尾定位符

. 匹配任意单个字符

* 匹配0个或多个前导字符(包括回车)

+ 匹配1个或多个前导字符

? 匹配0个或1个前导字符

[] 匹配指定字符组内的任意一个字符/^[ab]

[^] 匹配不在指定字符组内的任意一个字符

() 子表达式

| 或者

\ 转义符

~,!~ 匹配或不匹配的条件语句

x{m} x字符重复m次

x{m,} x字符至少重复m次

X{m,n} x字符至少重复m次但不起过n次(需指定参数-posix或--re-interval)

更多Awk的介绍,请关注公众号后续内容或者参考AWK官方文档

END

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-10-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 民工哥技术之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档