字符截取命令

一、cut命令

功能:用于从文件或标准输入中提取指定字段或列

语法:cut [选项] 文件名

  • -f:列号,提取第几列,默认识别制表符分割出来的列(列号之间用,隔开)
  • -d:分隔符,按照指定的分隔符进行分割,然后结合-f提取指定列
  • -c:字符范围,不依赖分隔符,通过字符范围进行提取(n-m:从第n个提取到第m个字符;n-:从第n个字符开始提取到结尾;-m:从第1个字符提取到第m个字符)
1.准备测试数据
[root@localhost ~]# cat cut.txt 
ID	NAME	LINUX	MYSQL	DOCKER
0	xzhao	95	59	78
1	xqian	83	75	93
2	xsun	74	96	632.用-f选项过滤指定列的内容
[root@localhost ~]# cut -f 2,5 cut.txt
NAME	DOCKER
xzhao	78
xqian	93
xsun	63
#cut只能分割用制表符分开列的文件,若列是用其他符号分割的,需要用-d选项指定3.通过-d指定分隔符的方式过滤指定文件的第7列
[root@localhost ~]# cut -d: -f 7 /etc/passwd
/bin/bash
/sbin/nologin4.获取当前所在路径的最后一个层级目录
[root@localhost ~]# pwd 
/root
[root@localhost ~]# pwd | cut -d/ -f 2
root#-c 可以按照字符数量进行截取,按照对应格式可以取到对应位置的字符
#截取多个范围的字符时用,隔开
5.用-c选项截取指定范围的列
[root@localhost ~]# head -n 5 anaconda-ks.cfg 
# Generated by Anaconda 34.25.4.9
# Generated by pykickstart v3.32
#version=RHEL9
# Use graphical install
graphical
[root@localhost ~]# head -n 5 anaconda-ks.cfg | cut -c 1-5
# Gen
# Gen
#vers
# Use
graph

二、awk命令

功能:对文件进行行提取和列提取

格式:awk ‘条件{动作}’ 文件名

  1. 条件的作用:通过指定条件过滤出符合条件的行,没有指定则是操作所有行
  2. 动作的作用:通过动作将符合条件的行打印出来,打印时可选择打印该行中的哪些列

注:条件控制行,动作控制列

例:awk  '{print 列}'  文件名  或  awk  '{printf 列}'  文件名——(不换行)

  • awk的内置参数$n:n=0表示所有列,n=1表示第一列......
  • 从printf打印输出可以看出,awk的工作原理是一行一行去处理的
  • NF:这行的列数(固定);$NF可以去每列的最后一行;$(NF-1)可以取倒数第二列
  • FS:用来声明awk的分隔符,如BEGIN{FS=":"};或-F指定分隔符
  • NR:当前行(变化),即awk 'NR==2{print $2"\t"$4}' 文件名
#不指定任何条件,直接执行动作,并选择输出哪些列,常用printf来打印
1.等价cut,截取第2列和第5列的值
[root@localhost ~]# awk '{print $2"\t"$5}' cut.txt 
NAME	DOCKER
xzhao	78
xqian	93
xsun	632.读取文件中任意一列的数据
[root@localhost ~]# awk '{printf $1"\t" $2"\t" $3"\n"}' cut.txt
ID	NAME	LINUX
0	xzhao	95
1	xqian	83
2	xsun	74
[root@localhost ~]# awk '{printf $0 "\n"}' cut.txt
ID	NAME	LINUX	MYSQL	DOCKER
0	xzhao	95	59	78
1	xqian	83	75	93
2	xsun	74	96	63#NF
3.读取文件每行的总列数
[root@localhost ~]# awk '{print NF}' cut.txt
5
5
5
5
4.获取文件的最后一列
[root@localhost ~]# awk '{print $NF}' cut.txt
DOCKER
78
93
63
5.获取文件的倒数第二列
[root@localhost ~]# awk '{print $(NF-1)}' cut.txt
MYSQL
59
75
96
6.获取文件的第一列和最后一列
[root@localhost ~]# awk '{print $1"\t"$NF}' cut.txt
ID	DOCKER
0	78
1	93
2	63#FS或-F,FS条件直接使用没有办法正常匹配第一行,需要用到BEGIN;默认分隔符是空白
7.读取/etc/passwd的第一列和最后一列
[root@localhost ~]# awk '{FS=":"}{print $1 "\t" $NF}' /etc/passwd
root:x:0:0:root:/root:/bin/bash	root:x:0:0:root:/root:/bin/bash
bin	/sbin/nologin
daemon	/sbin/nologin
adm	/sbin/nologin
lp	/sbin/nologin
sync	/bin/sync
.....................
[root@localhost ~]# awk -F: '{print $1 "\t" $NF}' /etc/passwd
root	/bin/bash
bin	/sbin/nologin
daemon	/sbin/nologin
adm	/sbin/nologin
.....................
[root@localhost ~]# awk 'BEGIN{FS=":"}{print $1 "\t" $NF}' /etc/passwd
root	/bin/bash
bin	/sbin/nologin
daemon	/sbin/nologin
adm	/sbin/nologin
lp	/sbin/nologin#NR条件
8.截取磁盘的使用率
[root@localhost ~]# df -h | awk '{print $5}'
已用%
0%
0%
2%
12%
13%
0%
9.截取磁盘的使用率的数据部分
[root@localhost ~]# df -h | awk 'NR>1{print $5}'
0%
0%
2%
12%
13%
0%
10.截取根分区的磁盘使用率
[root@localhost ~]# df -h | awk 'NR==5{print $5}'
12%
11.截取根分区磁盘使用率的数字部分
[root@localhost ~]# df -h | awk 'NR==5{print $5}' | cut -d% -f1
12

三、awk的条件

1.自定义条件

  • 关系运算条件(>,<,>=,<=,==,!=):用来判断左右两侧的关系
  • 包含匹配条件(~,!~,~//,!~//):用来进行匹配包含关系的,支持正则
1.列出所有行号大于1的行的列数据
[root@localhost ~]# awk 'NR>1{print $0}' cut.txt 
0	xzhao	95	59	78
1	xqian	83	75	93
2	xsun	74	96	632.列出学号为2的各科成绩单
[root@localhost ~]# awk '$1==2{print $0}' cut.txt 
2	xsun	74	96	633.列出LINUX成绩大于等于80的成绩单
[root@localhost ~]# awk '$3>=80{print $2"\t"$3}' cut.txt 
NAME	LINUX
xzhao	95
xqian	834.获取当前用户使用的网卡名
[root@localhost ~]# ip add | grep "inet[^6]" | grep -v "127" | awk '{print $NF}'
ens1605.列出第二列包含字符q的数据
[root@localhost ~]# awk '$2~"q"{print $0}' cut.txt 
1	xqian	83	75	936.列出第二列以字符n结尾的数据
[root@localhost ~]# awk '$2~"n$"{print $0}' cut.txt 
1	xqian	83	75	93
2	xsun	74	96	637.列出包含数字3的数据
[root@localhost ~]# awk '$0~"3"{print $0}' cut.txt 
1	xqian	83	75	93
2	xsun	74	96	63
或
[root@localhost ~]# awk '$0~/3/{print $0}' cut.txt 
或
[root@localhost ~]# awk '/3/{print $0}' cut.txt 8.列出以.com结尾的数据
[root@localhost ~]# awk '/\.com$/{print $0}' cut.txt 

2.预定义条件

  • BEGIN:在awk未读取数据前声明的条件
  • END:在awk处理完所有数据后声明的条件
[root@localhost ~]# awk 'BEGIN{printf "MYSQL成绩单:\n"} {printf $2"\t"$4"\n"}' cut.txt
MYSQL成绩单:
NAME	MYSQL
xzhao	59
xqian	75
xsun	96[root@localhost ~]# awk '{printf $2"\t"$5"\n"}END{printf "以上显示的是所有人的DOCKER成绩\n"}' cut.txt
NAME	DOCKER
xzhao	78
xqian	93
xsun	63
以上显示的是所有人的DOCKER成绩

  1. 若有多个条件(动作),可以用空格分隔
  2. 在包含匹配中,若想使用特殊字符的转义态,需要使用~//符号,不能直接用“”
  3. 可以用“”的地方一定可以用//,但可以用//的地方不一定可以用“”
  4. awk在使用的时候可能会存在一些格式上的问题
  5. awk {print $3+$4},还可以做运算

四、动作(printf)

功能:printf是标准的格式化输出,取消所有默认格式,然后手动指定输出内容的类型和输出时的格式

格式:printf  '类型/格式'  字符串

输出类型

  • %s:将内容按照字符串类型输出(如:ns代表输出宽度是n,默认右对齐,-ns是左对齐)
  • %i:将内容按照整数类型输出(如:ni代表输出的宽度是n,默认右对齐,-ns是左对齐)
  • %f:将内容按浮点数类型输出(如%.2f,保留两位小数,四舍五入)

输出格式

  • \t:字符之间用制表符分割,即tab键
  • \n:字符之间用换行符分割,即enter键
  • 注:输出格式需要加双引号
1.使用printf输出表格文件
[root@localhost ~]# printf %s $(cat cut.txt)
IDNAMELINUXMYSQLDOCKER0xzhao9559781xqian8375932xsun749663[root@localhost ~]# 
#在使用printf输出时,如果仅指定输出类型,而不指定输出格式,则会把所有要输出内容连在一起输出,变
为一整行[root@localhost ~]# printf '%s\t%s\t%s\t%s\t%s\n' $(cat cut.txt)
ID	NAME	LINUX	MYSQL	DOCKER
0	xzhao	95	59	78
1	xqian	83	75	93
2	xsun	74	96	632.在输出时,想让第1列使用整数类型输出,3,4,5列使用浮点类型输出
[root@localhost ~]# printf '%i\t%s\t%.2f\t%.2f\t%.2f\n' $(cat cut.txt|grep -v ID)
0	xzhao	95.00	59.00	78.00
1	xqian	83.00	75.00	93.00
2	xsun	74.00	96.00	63.003.打印名字和Linux成绩,且成绩保留2位小数
[root@localhost ~]# printf '%s\t%.2f\n' $(awk 'NR>1{printf $2"\t"$3"\n"}' cut.txt)
xzhao	95.00
xqian	83.00
xsun	74.004.计算每个人的平均值
[root@localhost ~]# awk 'NR>1{printf $2"的平均分是\t"($3+$4+$5)/3"\n"}' cut.txt
xzhao的平均分是	77.3333
xqian的平均分是	83.6667
xsun的平均分是	77.6667
#awk中默认支持数值运算,并且整数、浮点数运算都支持

字符截取命令练习

问题1:监控当前根分区的使用情况(若根分区使用率超过10%,打印红色超标)

[root@localhost ~]# cat jiance.sh 
#!/bin/bash
usage=$(df -h | awk '$NF~/\/$/{print $(NF-1)}' | cut -d% -f1)
[ $usage -gt 10 ] && echo -e "\e[31m 超标 \e[0m"
[root@localhost ~]# bash jiance.sh 超标 
[root@localhost ~]#

问题2:列出第二列包含x的行的第2列和第4列(cut.txt)

[root@localhost ~]# cat cut.txt 
ID	NAME	LINUX	MYSQL	DOCKER
0	xzhao	95	59	78
1	xqian	83	75	93
2	xsun	74	96	63
[root@localhost ~]# awk '$2~"x"{print $2"\t"$4}' cut.txt 
xzhao	59
xqian	75
xsun	96
或
[root@localhost ~]# awk '$2~/x/{print $2"\t"$4}' cut.txt 

问题3:提取IP地址的网段(ip add)

[root@localhost ~]# ip add | grep "inet[^6]"inet 127.0.0.1/8 scope host loinet 192.168.66.66/24 brd 192.168.66.255 scope global noprefixroute ens160
[root@localhost ~]# ip add | grep "inet[^6]" | grep -v "127"inet 192.168.66.66/24 brd 192.168.66.255 scope global noprefixroute ens160
[root@localhost ~]# ip add | grep "inet[^6]" | grep -v "127" | awk '{print $2}'
192.168.66.66/24
[root@localhost ~]# ip add | grep "inet[^6]" | grep -v "127" | awk '{print $2}' | cut -d. -f3
66
[root@localhost ~]#

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高效浏览器标签页管理:Chrome扩展开发完全指南

Hi&#xff0c;我是前端人类学&#xff08;之前叫布兰妮甜&#xff09;&#xff01; 在信息过载的时代&#xff0c;浏览器标签页管理已成为提高工作效率的关键技能。本文将介绍如何开发一个功能完整的Chrome扩展&#xff0c;帮助用户高效管理浏览器标签页&#xff0c;并探讨其实…

从 WPF 到 Avalonia 的迁移系列实战篇3:ResourceDictionary资源与样式的差异与迁移技巧

从 WPF 到 Avalonia 的迁移系列实战篇3:ResourceDictionary资源与样式的差异与迁移技巧 我的GitHub仓库Avalonia学习项目包含完整的Avalonia实践案例与代码对比。 我的gitcode仓库是Avalonia学习项目。 文中主要示例代码均可在仓库中查看&#xff0c;涵盖核心功能实现与优化方案…

基于Springboot的音乐媒体播放及周边产品运营平台(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的音乐媒体播放及周边产品运营平台&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09…

【项目思维】嵌入式产业链与技术生态

这篇文章深入解析嵌入式产业链与技术生态上下游关系&#xff0c;辅助建立嵌入式工程师职业发展认知。嵌入式行业并不是“写单片机程序”那么简单&#xff0c;而是一个 从芯片设计到系统集成再到最终产品落地 的复杂生态链。理解上下游价值链&#xff0c;有助于你成为系统型工程…

机器学习(讲解)

一、引言&#xff1a;什么是监督学习&#xff1f;监督学习&#xff08;Supervised Learning&#xff09;是机器学习中最基础且应用最广泛的范式之一。其核心思想是利用已标记的数据&#xff08;即输入-输出对&#xff09;训练模型&#xff0c;使其能够对新的、未标记的数据进行…

使用 Bright Data Web Scraper API + Python 高效抓取 Glassdoor 数据:从配置到结构化输出全流程实战

使用 Bright Data Web Scraper API Python 高效抓取 Glassdoor 数据&#xff1a;从配置到结构化输出全流程实战 摘要 本文详细介绍了如何使用 Bright Data 的 Web Scraper API 搭配 Python&#xff0c;实现对 Glassdoor 平台信息的高效抓取。通过 API 请求构建器、反爬机制集成…

Burgan Bank Türkiye 如何借助 Elastic 改造可观测性和安全性

作者&#xff1a;来自 Elastic Jon Ashley, Ido Friedman, Burak Dz Burgan Bank Trkiye Burgan Bank K.P.S.C. 是科威特项目公司 (KIPCO) 集团的子公司&#xff0c;成立于 1977 年&#xff0c;是中东和北非 (MENA) 地区最大的控股集团和重要银行集团之一。 该银行作为客户的解…

LeetCode 165. 比较版本号 - 优雅Java解决方案

文章目录LeetCode 165. 比较版本号 - 优雅Java解决方案题目描述示例分析示例 1示例 2示例 3算法思路Java实现方案方案一&#xff1a;双指针法&#xff08;推荐&#xff09;方案二&#xff1a;优化的单次遍历法可视化执行过程示例&#xff1a;compareVersion("1.2", &…

基于Kubernetes StatefulSet的有状态微服务部署与持久化存储实践经验分享

基于Kubernetes StatefulSet的有状态微服务部署与持久化存储实践经验分享 在传统微服务架构中&#xff0c;大多数服务都是无状态的&#xff08;Stateless&#xff09;&#xff0c;可以通过 Deployment、ReplicaSet 等控制器实现水平自动扩缩容。但在生产环境中&#xff0c;仍有…

MySQL编程开发

变量系统变量&#xff1a;MySQL内置变量#查看所有系统变量show variables \G;#通过模糊查询筛选变量show variables like “%path%”;全局变量&#xff1a;在所有终端中都生效&#xff1b;会话变量&#xff1a;在当前会话&#xff08;本次登录&#xff09;&#xff1b;#可以通过…

20250830_Oracle 19c CDB+PDB(QMS)默认表空间、临时表空间、归档日志、闪回恢复区巡检手册

PDB 关业务,CDB 管底层;每天紧盯 PDB,必要时看 CDB。 一、CDB 与 PDB 的关系 Oracle 12c 以后引入 多租户架构(Multitenant),分成两类容器: 层级 名称 作用 存储内容 典型操作 CDB CDB$ROOT(容器数据库) 数据库实例的根容器 Oracle 元数据、系统表字典、公共用户、PDB…

什么是MIPS架构?RISC-V架构?有什么区别?【超详细初学者教程】

什么是MIPS架构&#xff1f;RISC-V架构&#xff1f;有什么区别&#xff1f;【超详细初学者教程】 关键词&#xff1a;MIPS架构&#xff0c;RISC-V架构&#xff0c;精简指令集RISC&#xff0c;嵌入式系统&#xff0c;CPU架构对比&#xff0c;指令集架构&#xff0c;开源处理器&…

IDEA Spring属性注解依赖注入的警告 Field injection is not recommended 异常解决方案

一、异常错误 在使用 IntelliJ IDEA 进行 Spring 开发时&#xff0c;当使用 Autowired 注解直接在字段上进行依赖注入时&#xff0c;IDE 会显示黄色警告&#xff1a; Field injection is not recommended这个警告出现在以下代码模式中&#xff1a; Service public class UserSe…

智能核心:机器人芯片的科技革新与未来挑战

在人工智能与机器人技术深度融合的今天&#xff0c;机器人芯片作为驱动智能机器的“大脑”&#xff0c;正成为科技竞争的战略制高点。这一微小却至关重要的硬件&#xff0c;决定了机器人的计算能力、响应速度与智能水平&#xff0c;是机器人从“自动化”迈向“自主化”的关键所…

经典扫雷游戏实现:从零构建HTML5扫雷游戏

一、引言 扫雷是一款经典的单人益智游戏&#xff0c;起源于20世纪60年代&#xff0c;并在90年代随着Windows操作系统的普及而风靡全球。本文将详细介绍如何使用现代网页技术&#xff08;HTML、CSS和JavaScript&#xff09;从零开始构建一个功能完整的扫雷游戏。我们将涵盖游戏逻…

ccache编译加速配置

ccache 介绍 ccache(“compiler cache”的缩写)是一个编译器缓存,该工具会高速缓存编译生成的信息,并在编译的特定部分使用高速缓存的信息, 比如头文件,这样就节省了通常使用 cpp 解析这些信息所需要的时间。 github :https://github.com/ccache/ccache home:https://c…

数据库主键选择策略分析

为什么不推荐使用数据库自增主键&#xff1f;分库分表问题&#xff1a;自增ID在分库分表场景下会导致ID冲突需要额外机制(如步长设置)来保证全局唯一&#xff0c;增加系统复杂度安全性问题&#xff1a;自增ID容易暴露业务量(如订单号连续)可能被恶意爬取数据分布式系统限制&…

线性代数理论——状态空间的相关概念以及由系统的输入输出导出状态空间描述

线性代数理论——状态空间 状态&#xff1a;动态系统的状态就是指系统的过去、现在、将来的运动状况&#xff0c;精确的说就是状态需要一组必要而充分的数据来表明。 状态变量&#xff1a;可以表达系统运动状态的变量都是状态变量。 状态变量组&#xff1a;可以完全表征系统在时…

【GaussDB】排查应用高可用切换出现数据库整体卡顿及报错自治事务无法创建的问题

【GaussDB】排查应用高可用切换出现数据库整体卡顿及报错自治事务无法创建的问题 背景 某客户在做应用程序的高可用切换测试&#xff0c;在应用程序中&#xff0c;收到了来自数据库的报错&#xff0c;不能创建自治事务 ERROR: autonomous transaction failed to create auton…

shell脚本第五阶段---shell函数与正则表达式

学习目标掌握case语句的基本语法结构掌握函数的定义以及调用掌握常用的正则表达式元字符含义一、case语句case语句为多选择语句。可以用case语句匹配一个值与一个模式&#xff0c;如果匹配成功&#xff0c;执行相匹配的命令。case var in 定义变量&#xff1b;var代表变量名…