首页 > 其他分享 >awk 基本用法

awk 基本用法

时间:2024-08-03 18:25:47浏览次数:17  
标签:基本 输出 grep 用法 awk 分隔符 print NR

学习简介:

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


内容:

模式,模式可以是以下任意一种
  1. 正则表达式:使用通配符的扩展集
  2. 关系表达式:使用运算符进行操作,可以是字符串或数字的比较测试
  3. 模式匹配表达式:用运算符~匹配和~!不匹配
  4. BEGIN语句块,pattern语句块,END语句块

WAK用法:

基本用法:
awk‘条件1{动作1} 条件2{动作2}…’ 文件名
条件(Pattern):
    一般使用关系表达式作为条件。这些关系表达式非常多,例如:
    x > 10  判断变量x是否大于10
    x == y  判断变量x是否等于变量y
    A ~ B   判断字符串A中是否包含能匹配B表达式的子字符串
    A !~ B  判断字符串A中是否不包含能匹配B表达式的子字符串

#动作(Action) :
    格式化输出
    流程控制语句

#常用参数:

   -F   指定输入时用到的字段分隔符
   -v   自定义变量
   -f   从脚本中读取awk命令
   -m   对val值设置内在限制
printf 格式化输出
printf ‘输出类型输出格式’ 输出内容

输出类型:
%c:     ASCII字符.显示相对应参数的第一个字符
%-ns:   输出字符串,减号“-”表示左对齐(默认右对齐),n是数字指代输出几个字符,几个参数就写几个%-ns
%-ni:   输出整数,n是数字指代输出几个数字
%f:    输出小数点右边的位数
%m.nf:  输出浮点数,m和n是数字,指代输出的整数位数和小数位数。如%8.2f代表共输出8位数,其中2位是小数,6位是整数。

输出格式:
\a: 输出警告声音
\b: 输出退格键,也就是Backspace键
\f: 清除屏幕
\n: 换行
\r: 回车,也就是Enter键
\t: 水平输出退格键,也就是Tab 键
\v: 垂直输出退格键,也就是Tab 键
AWK条件
条件的类型	条件	说明
awk保留字	BEGIN	在awk程序一开始时,尚未读取任何数据之前执行。BEGIN后的动作只在程序开始时执行一次
awk保留字	END	在awk程序处理完所有数据,即将结束时执行。END后的动作只在程序结束时执行一次
关系运算符	>	大于
关系运算符	<	小于
关系运算符	>=	大于等于
关系运算符	<=	小于等于
关系运算符	==	等于。用于判断两个值是否相等,如果是给变量赋值,请使用“”号
关系运算符	!=	不等于
关系运算符	A~B	判断字符串A中是否包含能匹配B表达式的子字符串
关系运算符	A!~B	判断字符串A中是否不包含能匹配B表达式的子字符串
正则表达式	/正则/	如果在"//"中可以写入字符,也可以支持正则表达式

AWK内置变量
awk内置变量	作用
$0	代表目前awk所读入的整行数据。我们已知awk是一行一行读入数据的,$0就代表当前读入行的整行数据。
$n	代表目前读入行的第n个字段。比如,$1表示第1个字段(列),$2表示第2个字段(列),如此类推
NF	当前行拥有的字段(列)总数。
NR	当前awk所处理的行,是总数据的第几行。
FS	用户定义分隔符。awk的默认分隔符是任何空格,如果想要使用其他分隔符(如“:”),就需要FS变量定义。
ARGC	命令行参数个数。
ARGV	命令行参数数组。
FNR	当前文件中的当前记录数(对输入文件起始为1)。
OFMT	数值的输出格式(默认为%.6g)。
OFS	输出字段的分隔符(默认为空格)。
ORS	输出记录分隔符(默认为换行符)。
RS	输入记录分隔符(默认为换行符)。

示例:

打印文本文件的总行数 :

awk 'END{print NR}' filename
打印文本第一行 :

awk 'NR==1{print}' filename
打印文本第二行第一列 :

sed -n "2, 1p" filename | awk 'print $1'
获取第一列

ps -aux | grep watchdog | awk '{print $1}'
获取第一列,第二列,第三列

ps -aux | grep watchdog | awk '{print $1, $2, $3}'
获取第一行的第一列,第二列,第三列

ps -aux | grep watchdog | awk 'NR==1{print $1, $2, $3}'
获取行数NR

df -h | awk 'END{print NR}'
获取列数NF(这里是获取最后一行的列数,注意每行的列数可能是不同的)

ps -aux | grep watchdog | awk 'END{print NF}'
获取最后一列

ps -aux | grep watchdog | awk '{print $NF}'
对文件进行操作

awk '{print $1}' fileName
指定分隔符(这里以:分割)

ps -aux | grep watchdog |awk  -F':' '{print $1}'
超出范围不报错

ps -aux | grep watchdog | awk '{print $100}'
查询可以登录的用户的用户名和UID

cat /etc/passwd | grep "/bin/bash" | awk '{FS=":"} {printf $1 "\t" $3 "\n"}’
这里“:”分隔符生效了,可是第一行却没有起作用,原来我们忘记了“BEGIN”条件,那么再来试试;

cat /etc/passwd | grep "/bin/bash" | awk 'BEGIN {FS=":"} {printf $1 "\t" $3 "\n"}’
cat /etc/passwd | grep "/bin/bash" | awk 'BEGIN {FS=":"} {printf $1 "\t" $3 "\t 行号:” NR "\t 字段数:" NF "\n"}’
#解释下awk命令
#开始执行{分隔符是“:”}{输出第一字段和第三字段输出行号(NR值)字段数(NF值)}
root     0      行号:1       字段数:7
user1   501     行号:2       字段数:7
如果我只想看看sshd这个伪用户的相关信息,则可以这样使用:

可以看到sshd 伪用户的UID是74,是/etc/passwd_文件的第28行,此行有7个字段

cat /etc/passwd | awk 'BEGIN {FS=":"} $1=="sshd" {printf $1 "\t" $3 "\t 行号:" NR "\t 字段数:" NF "\n"}’

标签:基本,输出,grep,用法,awk,分隔符,print,NR
From: https://blog.csdn.net/weixin_61753702/article/details/140867630

相关文章

  • Shell编程基本介绍
    文章目录Shell简介Shell环境第一个Shell脚本Shell脚本的运行方法基础语法Shell变量定义变量使用变量修改变量的值单引号和双引号的区别将命令的结果赋值给变量只读变量删除变量Shell传递参数特殊字符处理参数说明$*与$@区别Shell字符串三种形式的区别获取字符串长......
  • 4、Qt-pyqt6常用基本控件
    控件对应QTDesigner中的左侧控件Layouts--布局管理控件名说明VerticalLayout垂直布局HorizontalLayout水平布局GridLayout网格布局FormLayout表单布局Spacers--弹簧控件名说明HoriziontalSpacer水平弹簧VerticalSpacer垂......
  • caffe编译和基本使用(Windows + CPU)
    xqspace0.摘要本文主要完成以下几点:caffe默认支持是vs2013/vs2015+python2.7/python3.5,使用其他版本会比较麻烦,这里使用的是vs2015和python3.5;完成caffe在windows上的编译(cpu版);提供caffe的python接口;caffe的基本使用方法(这里是推荐几篇讲的比较详细的入门博文);......
  • yarn的安装与配置(秒懂yarn用法)
    要安装和配置Yarn,可以按照以下步骤进行操作:1.安装Node.js:Yarn是基于Node.js的包管理工具,所以首先需要安装Node.js。在Node.js官网(https://nodejs.org/)上下载并安装适合你操作系统的Node.js版本。2.安装Yarn:一旦安装了Node.js,可以使用Node.js自带的npm(NodePackageManager)......
  • Hadoop HA高可用集群基本配置
    环境三台虚拟机q1,q2,q3,仅供学习使用版本hadoop-2.6.0-cdh5.14.2一、core-site.xml示例:pandas是基于NumPy的一种工具,该工具是为了解决数据分析任务而创建的。<configuration> <property> <name>hadoop.http.staticuser.user</name> <value>root</value> </prop......
  • Python:range()函数的用法
    range()函数是Python中一个内置函数,用于生成一个数字序列。这个函数通常用于在for循环中迭代一个指定的次数。range()函数可以接收一到三个参数,分别是起始值(start)、结束值(stop)和步长(step),但步长是可选的,默认值为1。基本用法两个参数:range(start,stop)生成一个从star......
  • 第31章 开放经济的宏观经济学:基本概念
    封闭经济(closedeconomy):不与世界上其他经济相互交易的经济开放经济(openeconomy):与世界上其他经济自由交易的经济  出口(exports):在国内生产而在国外销售的物品与服务进口(imports):在国外生产而在国内销售的物品与服务净出口(netexports):一国的出口值减进口值,又称贸易余额(trade......
  • OpenCV||超细节的基本操作
    一、图像读取retval=cv2.imread(filename[,flags])filename:需要读取的图片路径名,支持多种图片格式,如JPEG、PNG、TIFF等。flags:一个可选参数,指定加载图像的颜色类型。常用的值包括:cv2.IMGEAD_ANYDEPTH:其值是2。若载入的图像深度为16位或32位,就返回对应深度的图像,否则转......
  • Hadoop:java使用HDFS API实现基本操作工具类
    1、引入库<dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>3.1.0</version></dependency><dependency><groupId>org.apache.hadoop</......
  • RabbitMQ知识总结(基本原理+高级特性)
    文章收录在网站:http://hardyfish.top/文章收录在网站:http://hardyfish.top/文章收录在网站:http://hardyfish.top/文章收录在网站:http://hardyfish.top/基本原理消息的可靠性投递RabbitMQ消息的投递路径为:生产者------>交换机------>队列------>消费者在Ra......