系统相关
首页 > 系统相关> > 技能篇:awk教程-linux命令

技能篇:awk教程-linux命令

作者:互联网

前言

购物返利 www.cpa5.cn

AWK是一门解释型的编程语言。用于文本处理,它的名字来源于它的三位作者的姓氏:Alfred Aho, Peter Weinberger 和 Brian Kernighan

关注公众号,一起交流,微信搜一搜: 潜行前行

程序结构

awk命令模式:

awk工作流程

image.png

BODY语句块执行解析

脚本命令: awk '{ [代码语句1][代码语句2] }如果没有 fileName 或其他输入流,且存在BODY语句块,BODY语句块会进入死循环;代码语句表达式以分号结束,也可以用换行符结束

运行awk文件脚本

awk基础语法

awk 'BEGIN{sum=1;print sum}'
1
#-------- 伪代码 1  ---------
if ({condition})
   代码逻辑...
else if({condition})
   代码逻辑...
else
   代码逻辑...
#-------- 伪代码 2  ---------
for ({初始化}; {condition};{后续逻辑}){
   代码逻辑...
}   
#-------- 伪代码 3  ---------
while ({condition}){
   代码逻辑...
}
#-------- 伪代码 4  ---------
do{
   代码逻辑...
}while ({condition})    
符号说明示例
^指数操作符a = a ^ 2
-/+一元操作符a = -10; a = +a;
condition ? action : action三元操作符(a > b) ? max = a : max = b;
&& / ||逻辑操作符if (num >= 0 && num <= 7)
== / !=等于不等于if (a == b)
awk 'BEGIN{sum=1;sum++; if(sum==2) print sum}'
2
$ awk 'BEGIN {arr["lwl"] = 1; arr["csc"] = 2; for (i in arr) printf "arr[%s] = %d
", i, arr[i]}'
arr[lwl] = 1
arr[csc] = 2
---- 空格拼接字符,则默认使用逗哈作为拼接符 ----
awk 'BEGIN { str1 = "csc, "; str2 = "lwl"; str3 = str1 str2; print str3 }'
csc, lwl
index(str, sub) #获取sub在str起始索引
length(str) #获取str长度
match(str, regex) #str是否匹配regex模式
split(str, arr, regex)
sub(regex, sub, string)
substr(str, start, l)
tolower(str)
toupper(str)

正则表达式

$ awk '$0 !~ 9' marks.txt
1) Amit     Physics   80
3) Shyam    Biology   87
# log.txt内容文件
1 csc world
2 lwl hello
----------输出第二列包含lwl的行------------------------------
$ awk '$2 ~ /lwl/ {print $2,$3}' log.txt
lwl hello
------输出包含csc的行---------------------------
$ awk '/csc/ {print $0}' log.txt
1 csc world

awk 程序常用的内建变量

变量描述
$n当前记录的第n个字段,字段间由FS分隔
$0完整的输入记录
ARGC命令行参数的数目
ARGV包含命令行参数的数组
ENVIRON环境变量
ERRNO最后一个系统错误的描述
FILENAME当前文件名
FS字段分隔符(默认是任何空格)
IGNORECASE进行忽略大小写的匹配
NF一条记录的字段的数目
NR已经读出的记录数,就是行号,从1开始
FNR和NR类似,不过如果存在多个输入文件,FNR当前文件的行号
OFS输出 字段分隔符
ORS输出 行分隔符
RLENGTH由match函数所匹配的字符串的长度
RS记录分隔符(默认是一个换行符)
RSTART由match函数所匹配的字符串的第一个位置
ARGIND循环处理数据时,当前被处理的ARGV的索引
PROCINFO包含进程信息的关联数组,例如UID,进程ID等
$ awk 'BEGIN { 
   for (i = 0; i < ARGC - 1; ++i) { 
      printf "ARGV[%d] = %s
", i, ARGV[i] 
   } 
}' csc lwl 
ARGV[0] = csc
ARGV[1] = lwl
$ awk 'BEGIN { print ENVIRON["USER"] }'
csc
$ awk 'END {print FILENAME}' test.txt
test.txt
$ awk 'BEGIN { if (match("One Two Three", "Thre")) { print RSTART } }
9

欢迎指正文中错误

参考文章

标签:语句,教程,str,BEGIN,csc,awk,lwl,linux
来源: https://blog.csdn.net/weixin_48967543/article/details/117874629