【Shell】Shell编程之文本处理器——awk

news2024/9/20 22:45:47
sed可以对文本内容进行增删改查

主要使用的是改和查;查使用grep,正则表达式使用grep -E更好

awk是文本三剑客中最强大的文本工具;

awk也是按行进行操作;对操作完之后可以根据指定命令来取列

awk的分隔符:默认为 "空格" 或 "tab键";有多个空格时,会自动压缩成一个进行判断

awk用法:

awk 选项 '模式或者条件{操作}' 文件
    -F    指定分隔符;如果是空格,可以不加-f
    -v    变量赋值
操作:默认就是打印

awk -F":" '{print $1,$3}' /etc/passwd
    $0    表示打印全部
awk常用的内置变量
    $n    表示处理行的第几行
    NR    表示处理的行的行号
    NF    处理当前行的字段个数,$NF就表示最好一个字段
    FS    列分隔符,指定文本的分隔符,和F的作用一致;-F:FS=":"
    OFS   输出文本的分隔符
    RS    指定分隔符为回车
内置变量$n要加$,其他的内置变量不用加$;
更不能用引导也不能用括号,否则会被当成字符串来处理
awk的打印功能
awk '0{print}' 文件A        不打印
awk '1{print}' 文件A        打印全部

 

awk 'NR==3{print}' 文件A			打印文件A第三行的内容
awk 'NR==2,NR==4{print}' 文件A		打印文件A第二行到第四行的内容
awk 'NR==2;NR==4{print}' 文件A		打印文件A第二行和第四行的内容

奇偶打印:
awk 'NR%2==0{print}' 文件A		打印偶数行
awk 'NR%2==1{print}' 文件A		打印奇数行

awk运算:
awk 'BEGIN{print 10+20}'	    计算10+20
awk 'BEGIN{print 3^2}'		    计算3的2次方;也可以用**代替^
awk 'BEGIN{print 10.2/4}'	    计算小数除法
***面试:awk的内置函数:getline
如果getline左右没有重定向符号 <,> ;或者没有管道符 | 时,awk会先读第一行,但是如果加了getline,会跳过第一行,读取第二行
awk '{getline;print}' 文件A		跳一行打印一行;偶数行打印
awk '{print;getline}' 文件A		打印一行跳一行;奇数行打印
***获取指定文件内容并重定向输出
awk '{getline < "test1.txt"; print > "test2.txt"}' test1.txt		

**
ls | awk '{getline ky30;print $0,ky30}'

文本内容过滤打印:

cat /etc/passwd | awk '/^r|bash$/{print}'

BEGIN模式;

awk 'BEGIN{..};{..};END{..}' 文件名

在对文件进行操作之前,会先执行BEGIN{..}模式条件,或者是命令操作

中间的{..}是真正的用于处理文件的命令

END{..}结束语句,一般都是打印执行结果

[root@test1 ~]# awk 'BEGIN{i=0};{i++};END{print i}' /etc/passwd
45

#从零行开始,每行i会自加1;最后打印i的值

        -v        变量赋值        #主要用于改变分隔符

fs=":";awk -v FS=$fs -v OFS="+" '{print $1,$3}' /etc/passwd
awk -F: '$4<10{print}' /etc/passwd | head -n 15
以冒号作为分隔符,打印15个第四列小于10的行
awk -F: '!($4<10){print}' /etc/passwd | head -n 15
!	表示取反

awk -F: '{if ($3=10) {print}}' /etc/passwd

awk条件判断打印:

三元表达式:类似JAVA
awk '(条件表达式) ?(A表达式/值): (B的表达式/值)'
?==if
:==else

awk -F: '{i=($3>$4)?$3:$4;{print i}}' /etc/passwd | sed -n '1,6p'
打印passwd中第三列大于第四列的$3,否则打印$4

awk的精确筛选:

1. > < =	比较数值
2. $n~"字符串"		表示第n个字段包含某个字符
   $n!~"字符串"		取反;表示第n个字段不包含某个字符
   $n=="字符串"		表示第n个字段就是某个字符
   $n!="字符串"		取反;表示第n个字段不是某个字符
   $NF				最后一个字段

awk -F: '$7!~"nologin" {print $1,$3}' /etc/passwd

awk -F: '($6~"/home/")&&($7=="/bin/bash") {print $1,$6,$NF}' /etc/passwd
awk -F: '($3!=0)||($4>10) {print $1}' /etc/passwd
awk和tr改变分隔符的比较;tr更直观
[root@test1 ~]# echo a b c d | tr " " ":"
a:b:c:d
[root@test1 ~]# echo a b c d | awk '{OFS=":"; $1=$1;print}'
a:b:c:d
awk结合数组来进行使用
awk 'BEGIN{a[0]=10;a[1]=20;a[2]=30;for(i in a)print i,a[i]}'

***去重

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/821841.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux第七章之gdb与makefile使用

一、Linux调试器-gdb使用 1.1背景 程序的发布方式有两种&#xff0c;debug模式和release模式Linux gcc/g出来的二进制程序&#xff0c;默认是release模式要使用gdb调试&#xff0c;必须在源代码生成二进制程序的时候, 加上-g 选项&#xff3b;重要&#xff3d; 1.2开始使用 …

爬虫原理详解及requests抓包工具用法介绍

文章目录 一、什么是爬虫&#xff1f;二、爬虫的分类三、网址的构成四、爬虫的基本步骤五、动态页面和静态页面六、伪装请求头七、requests库介绍1. 概念&#xff1a;2. 安装方式&#xff08;使用镜像源&#xff09;&#xff1a;3. 基本使用&#xff1a;4. response对象对应的方…

一起学算法(数组篇)

1.概念&#xff1a; 1.顺序存储 顺序存储结构&#xff0c;是指用一段地址连续的存储单元来依次存储结构&#xff0c;如图所示&#xff0c;每个蓝色方块都对应了数组中的一个数据&#xff0c;数据有类型&#xff0c;例如&#xff1a;32位整型int、单精度浮点型float、双精度浮点…

你知道HTTP与HTTPS有什么区别吗?

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 一、什么是HTTP&#xff1f; 二、什么是HTTPS&#xff1f; 三、HTTPS 的工作原理 1、客户端发起 HTTPS 请求 2、服务端的配置 3、…

如何设计一个Android端高性能日志监控系统

开发中客户端经常遇到一些线上问题, 无法复现, 但是又的的确确存在; 当线上反馈的时候无从下手; 主要是因为并不知道用户所处的环境,以及所做的操作顺序或者程序运行的顺序; 在排查问题和复现问题上占用了很大的成本; 如果debug时的log日志如果线上也能查看就好了; 基于此, 我们…

5.类型推论,类型断言,类型兼容性

目录 1 类型推论 2 类型断言 2.1 类型推论所带来的问题 2.2 基本使用 2.3 不断言会出现的问题 2.4 断言的另一种写法 2.5 查看DOM元素的类型 3 类型兼容性 3.1 类兼容性 3.2 接口兼容性 3.2.1 接口之间的兼容性 3.2.2 接口与类之间的兼容性 3.3 函数…

C++ 类的静态成员

在结构化程序设计中程序模块的基本单位是函数&#xff0c;因此模块间对内存中数据的共享是通过函数与和函数之间的数据共享来实现的&#xff0c;其中包括两个途径——参数传递和全局变量。 面向对象的程序设计方法兼顾数据的共享和保护&#xff0c;将数据与操作数据的函数封装…

解决运行flutter doctor --android-licenses时报错

问题描述&#xff1a; 配置flutter环境时&#xff0c;会使用flutter doctor命令来检查运行flutter的相关依赖是否配好。能看到还差 Android license status unknown.未解决。 C:\Users\ipkiss.wu>flutter doctor Flutter assets will be downloaded from https://storage.…

【MySQL】数据库的增删查改+备份与恢复

文章目录 一、创建数据库create二、数据库所使用的编码2.1 查询字符集和校验集2.2 指定编码创建数据库2.3 不同的校验集对比 三、删除数据库drop四、查看数据库show五、修改数据库alter六、数据库的备份与恢复6.1 备份 mysqldump6.2 恢复source6.3 仅备份几张表或备份多个数据库…

互联网宠物医院开发:宠物健康护航的新选择

随着人们对宠物的关注度逐渐提高&#xff0c;宠物医疗服务也得到了更多的关注和需求。而互联网宠物医院作为一种新兴的医疗服务形式&#xff0c;正以其独特的优势和便捷性受到越来越多宠物主人的青睐。   首先&#xff0c;互联网宠物医院的最大优势在于提供了便捷的服务。宠物…

寻找峰值——力扣162

文章目录 题目描述法一 寻找最大值法二 二分法 题目描述 法一 寻找最大值 int findPeakElement(vector<int>& nums){return max_element(nums.begin(), nums.end()) - nums.begin();}法二 二分法 int findPeakElement(vector<int>& nums) {int l 0, r n…

onnx模型的保存与使用

1 onnx模型的保存 在网络训练结束之后&#xff0c;通常会将模型的权重参数保存到.pth或.pt文件中&#xff0c;如果部署环境中有pytorch&#xff0c;那么直接新建一个模型类对象&#xff0c;然后导入权重参数即可&#xff0c;但如果部署环境中只有OpenCV&#xff0c;没有pytorc…

融合大数据、物联网和人工智能的智慧校园云平台源码 智慧学校源码

电子班牌系统用以展示各个班级的考勤信息、授课信息、精品课程、德育宣传、班级荣誉、校园电视台、考场信息、校园通知、班级风采&#xff0c;是智慧校园和智慧教室的对外呈现窗口&#xff0c;也是学校校园文化宣传和各种信息展示的重要载体。将大数据、物联网和人工智能等新兴…

27岁到来之际,我在阿里实现了年薪30W+的小目标

毕业快 5 年了&#xff0c;每当和人聊起自己的职场飞升之路&#xff0c;都不由得感激当初果断逃离舒适圈的自己。出身一所非 211、985 院校&#xff0c;毕业后入职了一家小型互联网公司&#xff0c;当着普普通通的初级测试工程师&#xff0c;工作期间虽然也时常遇到挑战&#x…

性能优化点

Arts and Sciences - Computer Science | myUSF 索引3层&#xff08;高度为3&#xff09;一般对于数据库地址千万级别的表 大于2000万的数据进行分库分表存储 JVM整体结构及内存模型 JVM调优&#xff1a;主要为减少FULL GC的执行次数或者减少FULL GC执行时间 Spring Boot程序…

在线文档管理工具都有什么值得推荐的?

在线文档管理工具是现代企业和个人必备的工具之一&#xff0c;它们可以帮助用户方便地创建、编辑、共享和管理文档。 几个值得推荐的在线文档管理工具&#xff1a; Google 文档&#xff1a;Google 文档是一款免费的在线文档工具&#xff0c;它提供了和 Microsoft Word 类似的…

微信公众号开发学习

申请测试号 地址 通过F12抓取体验接口权限表的HTML 解析HTML 引入pom <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><…

物联网|可变参数的使用技巧|不一样的点灯实验|访问外设的寄存器|操作寄存器实现点灯|硬件编程的基本流程-学习笔记(11)

文章目录 可变参数的使用技巧第三阶段-初级实验Lesson5:不一样的点灯实验---学习I/O的输出 ☆点灯的电路图分析1 一起看看点灯的电路图Tip1:另一种点灯的电路Tip1:如何访问外设的寄存器2 STM32F407中操作GPIO的方法 通过直接操作寄存器实现点灯实验Tip1:硬件编程的基本流程 2代…

数据可视化(4)散点图及面积图

1.简单散点图 #散点图 #scatter(x,y) x数据&#xff0c;y数据 x[i for i in range(10)] y[random.randint(1,10) for i in range(10)] plt.scatter(x,y) plt.show()2.散点图分析 #分析广告支出与销售收入相关性 dfcarpd.read_excel(广告支出.xlsx) dfdatapd.read_excel(销售…

VS开发Qt程序,无法打印QDebug调试信息,VS进行Qt开发时Qt Designer无法使用“转到槽”选项

VS开发Qt程序&#xff0c;无法打印QDebug调试信息&#xff0c;VS进行Qt开发时Qt Designer无法使用“转到槽”选项 VS开发Qt程序&#xff0c;无法打印QDebug调试信息VS进行Qt开发时Qt Designer无法使用“转到槽”选项 VS开发Qt程序&#xff0c;无法打印QDebug调试信息 解决方案…