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
相关推荐
m0_653031361 小时前
腾讯云认证考试报名 - TDSQL数据库交付运维专家(TCCE PostgreSQL版)
运维·数据库·腾讯云
IC 见路不走1 小时前
LeetCode 第91题:解码方法
linux·运维·服务器
没有名字的小羊1 小时前
8.Docker镜像讲解
运维·docker·容器·tomcat
翻滚吧键盘1 小时前
查看linux中steam游戏的兼容性
linux·运维·游戏
小能喵1 小时前
Kali Linux Wifi 伪造热点
linux·安全·kali·kali linux
Code季风2 小时前
深入理解微服务中的服务注册与发现(Consul)
java·运维·微服务·zookeeper·架构·go·consul
java1234_小锋2 小时前
解释一下NGINX的反向代理和正向代理的区别?
运维·nginx
汀沿河2 小时前
8.1 prefix Tunning与Prompt Tunning模型微调方法
linux·运维·服务器·人工智能
zly35002 小时前
centos7 ping127.0.0.1不通
linux·运维·服务器
小哥山水之间3 小时前
基于dropbear实现嵌入式系统ssh服务端与客户端完整交互
linux