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
相关推荐
赛博云推-Twitter热门霸屏工具3 分钟前
Twitter运营完整流程:从0到引流获客全流程拆解(2026)
运维·安全·自动化·媒体·twitter
CHHC18807 分钟前
NetCore树莓派桌面应用程序
linux·运维·服务器
帮我吧智能服务平台1 小时前
装备制造智能制造升级:远程运维与智能服务如何保障产线OEE
运维·服务器·制造
w6100104661 小时前
cka-2026-cri-dockerd
运维·k8s·cka
云栖梦泽1 小时前
Linux内核与驱动:9.Linux 驱动 API 封装
linux·c++
卤炖阑尾炎2 小时前
PostgreSQL 日常运维全指南:从基础操作到备份恢复
运维·数据库·postgresql
handsomestWei2 小时前
Docker引擎API接入配置
运维·http·docker·容器·api
si莉亚2 小时前
ROS2安装EVO工具包
linux·开发语言·c++·开源
Tingjct2 小时前
Linux常用指令
linux·运维·服务器
广州灵眸科技有限公司3 小时前
为RK3588注入澎湃算力:RK1820 AI加速卡完整适配与评测指南
linux·网络·人工智能·物联网·算法