Linux提升篇-awk

目录

awk

awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自于标准输入、一个或多个文件、或其他命令的输出。它支持用户自定义函数和动态正则表达式等功能,是linux/unix下的一个强大的编程工具。它在命令行中使用,但更多是作为脚本使用。awk有很多内建的功能,比如数组、函数等。

语法

bash 复制代码
awk [选项] '脚本命令' 文件名

常用命令选项

  • -F fs:指定以fs作为输入行的分隔符,awk命令默认分隔符为空格或制表符
  • -v var=value:在执行处理过程之前,设置一个变量var,并给其设置初始值
  • -f scriptfile:从脚本文件中读取awk命令,以取代直接在命令行中输入指令

awk的强大之处在于脚本命令,它由两部分组成,分别为匹配规则和执行命令,如下所示:

bash 复制代码
'匹配规则{执行命令}'

这里的匹配规则,用来指定脚本命令中可以作用到文本内容中的具体行,可以使用字符串(比如/demo/,表示查看含有demo字符串的行)或正则表达式指定。

注:整个脚本命令是用单引号括起来,而其中的执行命令部分需要用大括号括起来

变量 描述
FS 输入字符分隔符,默认为空白字符
OFS 输出字段分隔符,默认为空白字符
RS 输入记录分隔符,指定输入时的换行符,原换行符仍有效
ORS 输出记录分隔符,输出时用指定符号代替换行符
NF 字符数量,共有多少个字段, N F 引用最后一列, NF引用最后一列, NF引用最后一列,(NF-1)引用倒数第二列
NR 行号,后可跟多个文件,第二个文件行号则继续从第一个文件最后行号开始
FNR 各文件分别计数,行号;后跟一个文件和NR一样,跟多个文件,第二个文件行号从1开始
FILENAME 当前文件名
ARGC 命令行参数的个数
ARGV 数组,保存的是命令行所给定的各参数,查看参数

示例:

bash 复制代码
# cat awkdemo 
hello:world
linux:redhat:lalala:hahaha
along:love:you

#指定冒号为分隔符,输出每行第一个变量和第二个变量
# awk -v FS=":" '{print $1,$2}' awkdemo  #FS指定输入分隔符
hello world
linux redhat
along love
#以冒号为分隔符,指定新的分隔符为"---",输出每行第一个变量和第二个变量
# awk -v FS=":" -v OFS="---" '{print $1,$2}' awkdemo  #OFS指定输出分隔符
hello---world
linux---redhat
along---love
#指定冒号为输入记录分隔符,(不指定输出分隔符,默认为空格),输出每行第一个变量和第二个变量
# awk -v RS=":" '{print $1,$2}' awkdemo
hello 
world linux
redhat 
lalala 
hahaha along
love 
you 
#指定冒号为输入字符分隔符,替换换行符为"---",输出每行第一个变量和第二个变量
# awk -v FS=":" -v ORS="---" '{print $1,$2}' awkdemo 
hello world---linux redhat---along love---
#指定冒号为输入分隔符,输出每行的变量数量
# awk -F: '{print NF}' awkdemo
2
4
3
#指定冒号为输入分隔符,输出每行的倒数第二个变量
# awk -F: '{print $(NF-1)}' awkdemo 
hello
lalala
love

自定义变量

1、先定义变量,后执行动作

bash 复制代码
# cat awkdemo 
hello:world
linux:redhat:lalala:hahaha
along:love:you

# awk -v name="along" -F: '{print name":"$0}' awkdemo
along:hello:world
along:linux:redhat:lalala:hahaha
along:along:love:you

2、先执行动作,后定义变量

bash 复制代码
# awk -F: '{print name":"$0;name="along"}' awkdemo
:hello:world
along:linux:redhat:lalala:hahaha
along:along:love:you

3、调用脚本进行定义

bash 复制代码
# cat awk.txt 
{name="along";print name,$1}

# awk -F: -f awk.txt awkdemo
along hello
along linux
along along
相关推荐
PcVue China2 小时前
PcVue + SQL Grid : 释放数据的无限潜力
大数据·服务器·数据库·sql·科技·安全·oracle
舞动CPU4 小时前
linux c/c++最高效的计时方法
linux·运维·服务器
皮锤打乌龟5 小时前
(干货)Jenkins使用kubernetes插件连接k8s的认证方式
运维·kubernetes·jenkins
钰@5 小时前
小程序开发者工具的network选项卡中有某域名的接口请求,但是在charles中抓不到该接口
运维·服务器·小程序
wanhengwangluo5 小时前
云服务器和物理服务器的区别有哪些?
运维·服务器
秦jh_6 小时前
【Linux】多线程(概念,控制)
linux·运维·前端
yaosheng_VALVE7 小时前
稀硫酸介质中 V 型球阀的材质选择与选型要点-耀圣
运维·spring cloud·自动化·intellij-idea·材质·1024程序员节
看山还是山,看水还是。7 小时前
Redis 配置
运维·数据库·redis·安全·缓存·测试覆盖率
扣得君7 小时前
C++20 Coroutine Echo Server
运维·服务器·c++20
keep__go8 小时前
Linux 批量配置互信
linux·运维·服务器·数据库·shell