Day19-三剑客之awk实践

2024-02-27 19:20
文章标签 实践 day19 awk 三剑客

本文主要是介绍Day19-三剑客之awk实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Day19-三剑客之awk实践

练习:/etc/passwd,/etc/fstab
首先准备好测试文件,取passwd文件前5行。

sed -n '1,5p' /etc/passwd >test.txt
[root@oldboy ~]# sed -n '1,5p' /etc/passwd >test.txt
[root@oldboy ~]# cat test.txt 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

问题1:取test.txt文件的第2行到第3行的内容。
方法1:

[root@oldboy ~]# sed -n '2,3p' test.txt 
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

方法2:

[root@oldboy ~]# awk 'NR==2,NR==3' test.txt 
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin打印2-3行,同时打印行号
[root@oldboy ~]# awk 'NR==2,NR==3{print NR,$0}' test.txt 
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin

方法3:

[root@oldboy ~]# awk 'NR>1&&NR<4' test.txt 
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

方法4:

[root@oldboy ~]# head -3 test.txt |tail -2
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

方法5:

[root@oldboy ~]# grep -A 1 -n "^bin" test.txt 
2:bin:x:1:1:bin:/bin:/sbin/nologin
3-daemon:x:2:2:daemon:/sbin:/sbin/nologin[root@oldboy ~]# grep -B 1 -n "^dae" test.txt 
2-bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
!    取反
&& (并且)
|| (或者)
== (表示相等)
=    赋值 a=1  

专业取行 sed

专业取列 awk

专业过滤 grep

问题2:过滤出含有root字符串的行※。

[root@oldboy ~]# awk '/root/' test.txt 
root:x:0:0:root:/root:/bin/bash[root@oldboy ~]# grep root test.txt 
root:x:0:0:root:/root:/bin/bash[root@oldboy ~]# sed -n '/root/p' test.txt 
root:x:0:0:root:/root:/bin/bash

问题3:删除含有root字符串的行※。

[root@oldboy ~]# sed '/root/d' test.txt 
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin[root@oldboy ~]# awk '/^[^r]/' test.txt 
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

问题4:取文件的第一列、第三列和最后一列内容,并打印行号※。

[root@oldboy ~]# awk -F ":" '{print NR,$1,$3,$NF}' test.txt 
1 root 0 /bin/bash
2 bin 1 /sbin/nologin
3 daemon 2 /sbin/nologin
4 adm 3 /sbin/nologin
5 lp 4 /sbin/nologin

问题5:取出Linux中执行ifconfig eth0后对应的IP地址(只能输出IP地址)。

[root@oldboy ~]# ifconfig eth0|sed -rn 's#^.*inet (.*)  netm.*$#\1#gp'
10.0.0.130[root@oldboy ~]# hostname -I
10.0.0.130 10.0.0.129[root@oldboy ~]# ifconfig eth0|awk 'NR==2{print $2}'
10.0.0.130

把要取的内容两边相邻的一堆内容做分隔符。

[root@oldboy ~]# ifconfig eth0|awk -F "(inet )|(  netm)" 'NR==2{print $2}' 
10.0.0.130
#<==竖线正则的意思表示匹配或者左边或者右边,小括号是分组作为一个整体,即以“addr:”或“  Bcast:”做分隔符

多分隔符用法:

[root@oldboy ~]# echo "1::::2====3----4"|awk -F "[:=-]+" '{print $1,$2,$3,$4}'
1 2 3 4
[:=-]  #里面任意一个做分隔符
[:=-]+ #遇到[]里的任意多个字符算一个。#上述不同的分隔符连续也算一个。
[root@oldboy ~]# echo "1:::==:2==::==3----4"|awk -F "[:=-]+" '{print $1,$2,$3,$4}'
1 2 3 4

练习:

用awk取stat /etc/hosts结果的644

解答:先取行,在取列。

[root@oldboy ~]# stat /etc/hosts|awk 'NR==4'
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
[root@oldboy ~]# stat /etc/hosts|awk -F "[0/]" 'NR==4{print $2}'
644

带条件的AWK;

【行的条件】

[root@oldboy ~]# stat /etc/hosts|awk -F "[0/]" 'NR==4{print $2}'
644

【内容模糊匹配】

问题6:过滤文件中第一列内容匹配root的字符串,把符合的行的最后一列输出。

解答:这道题在过滤日志信息的时候常用,示例如下。

[root@oldboy ~]#  awk -F ":" '$1~/root/ {print $NF}' test.txt 
#<==$1~/root/表示第一列内容匹配root条件,$NF表示最后一列。#/etc/passwd
awk -F ":"  '$1~/oldboy/{print $NF}' /etc/passwd

问题7:过滤下列test1.txt文件中第三列内容分数大于70,并且小于95的人名和性别。

[root@oldboyedu ~]# cat test1.txt 
张三 男  80
李四 女  70
王五 男  90
赵六 女  100

中文乱码:

1)调解xshell属性-终端-字符集-简体中文gb18030(只调一个就好了)

2)如果还不行做如下调整:

[root@oldboy ~]# tail -2 /etc/profile
#export LANG='en_US.UTF-8'
export LANG='zh_CN.UTF-8'# 生效:
. /etc/profile

解答:

[root@oldboy ~]# awk '$3>70&&$3<95{print $1,$2}' test1.txt  
张三 男
王五 男

把要取的内容两边相邻的一堆内容做分隔符。

[root@oldboy ~]# ifconfig eth0|awk -F "(inet )|(  netm)" 'NR==2{print $2}' 
10.0.0.130
#<==竖线正则的意思表示匹配或者左边或者右边,小括号是分组作为一个整体,即以“addr:”或“  Bcast:”做分隔符

【答案】
https://ke.qq.com/course/2806831?taid=9996020988171311

这篇关于Day19-三剑客之awk实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/753351

相关文章

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

Prometheus与Grafana在DevOps中的应用与最佳实践

Prometheus 与 Grafana 在 DevOps 中的应用与最佳实践 随着 DevOps 文化和实践的普及,监控和可视化工具已成为 DevOps 工具链中不可或缺的部分。Prometheus 和 Grafana 是其中最受欢迎的开源监控解决方案之一,它们的结合能够为系统和应用程序提供全面的监控、告警和可视化展示。本篇文章将详细探讨 Prometheus 和 Grafana 在 DevO

springboot整合swagger2之最佳实践

来源:https://blog.lqdev.cn/2018/07/21/springboot/chapter-ten/ Swagger是一款RESTful接口的文档在线自动生成、功能测试功能框架。 一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务,加上swagger-ui,可以有很好的呈现。 SpringBoot集成 pom <!--swagge

vue2实践:el-table实现由用户自己控制行数的动态表格

需求 项目中需要提供一个动态表单,如图: 当我点击添加时,便添加一行;点击右边的删除时,便删除这一行。 至少要有一行数据,但是没有上限。 思路 这种每一行的数据固定,但是不定行数的,很容易想到使用el-table来实现,它可以循环读取:data所绑定的数组,来生成行数据,不同的是: 1、table里面的每一个cell,需要放置一个input来支持用户编辑。 2、最后一列放置两个b

【HarmonyOS】-TaskPool和Worker的对比实践

ArkTS提供了TaskPool与Worker两种多线程并发方案,下面我们将从其工作原理、使用效果对比两种方案的差异,进而选择适用于ArkTS图片编辑场景的并发方案。 TaskPool与Worker工作原理 TaskPool与Worker两种多线程并发能力均是基于 Actor并发模型实现的。Worker主、子线程通过收发消息进行通信;TaskPool基于Worker做了更多场景化的功能封装,例

vue2实践:第一个非正规的自定义组件-动态表单对话框

前言 vue一个很重要的概念就是组件,作为一个没有经历过前几代前端开发的我来说,不太能理解它所带来的“进步”,但是,将它与后端c++、java类比,我感觉,组件就像是这些语言中的类和对象的概念,通过封装好的组件(类),可以通过挂载的方式,非常方便的调用其提供的功能,而不必重新写一遍实现逻辑。 我们常用的element UI就是由饿了么所提供的组件库,但是在项目开发中,我们可能还需要额外地定义一

《C++中的移动构造函数与移动赋值运算符:解锁高效编程的最佳实践》

在 C++的编程世界中,移动构造函数和移动赋值运算符是提升程序性能和效率的重要工具。理解并正确运用它们,可以让我们的代码更加高效、简洁和优雅。 一、引言 随着现代软件系统的日益复杂和对性能要求的不断提高,C++程序员需要不断探索新的技术和方法来优化代码。移动构造函数和移动赋值运算符的出现,为解决资源管理和性能优化问题提供了有力的手段。它们允许我们在不进行不必要的复制操作的情况下,高效地转移资源

Vue3+elementplus实现图片上传下载(最强实践)

图片上传子组件: 实现照片的上传,预览,以及转成以逗号隔开的图片地址,即时监听,并发送消息到父组件。 <!-- ImageUploader.vue --> <template><div><el-upload class="avatar-uploader" :http-request="customUpload" :before-upload="beforeUpload":show-fil

Banana Pi BPI-F3 进迭时空RISC-V架构下,AI融合算力及其软件栈实践

RISC-V架构下,AI融合算力及其软件栈实践 面对未来大模型(LLM)、AIGC等智能化浪潮的挑战,进迭时空在RISC-V方向全面布局,通过精心设计的RISC-V DSA架构以及软硬一体的优化策略,将全力为未来打造高效且易用的AI算力解决方案。目前,进迭时空已经取得了显著的进展,成功推出了第一个版本的智算核(带AI融合算力的智算CPU)以及配套的AI软件栈。 软件栈简介 AI算法部署旨