Shell中的文本处理工具、cut [选项参数] filename 说明:默认分隔符是制表符、awk [选项参数] ‘/pattern1/{action1}filename 、awk 的内置变量

本文详细介绍了如何使用cut命令进行列切割,包括处理nan值、特定模式列提取等,并展示了awk的强大文本分析功能,如按条件筛选、列操作和变量使用。还涵盖了awk的基本语法、内置变量以及多个实用案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


如果想看更详细的Shell总结请到我之前写的博客https://blog.youkuaiyun.com/Redamancy06/article/details/126048299

1.文本处理工具

1.1cut

cut 的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。

1.1.1基本用法

cut [选项参数] filename
说明:默认分隔符是制表符

1.1.2选项参数说明

选项参数功能
-f列号,提取第几列
-d分隔符,按照指定分隔符分割列,默认是制表符“\t”
-c按字符进行切割 后加加 n 表示取第几列 比如 -c 1

1.1.3案例

1.1.3.1数据准备

[root@hadoop100 scripts]# vim cut_test.txt
在这里插入图片描述

1.1.3.2切割 cut_test.txt 第一列

[root@hadoop100 scripts]# cut -d " " -f 1 cut_test.txt
在这里插入图片描述

1.1.3.3切割 cut_test.txt 第二、三列

[root@hadoop100 scripts]# cut -d " " -f 2,3 cut_test.txt
在这里插入图片描述

1.1.3.4在 cut_test.txt 文件中切割出 nan

[root@hadoop100 scripts]# cat cut_test.txt | grep nan | cut -d " " -f 1

在这里插入图片描述

1.1.3.5要passwd中以bash结尾的第一,六,七列

[root@hadoop100 scripts]# cat /etc/passwd | grep bash$ | cut -d “:” -f 1,6,7

在这里插入图片描述

如果列多的话总不能1,2,3,4,5,6,7,8,9,10…等吧,可以用“-”来,下面介绍

1.1.3.6要passwd中以bash结尾的第1-4列

[root@hadoop100 scripts]# cat /etc/passwd | grep bash$ | cut -d “:” -f 1-4

在这里插入图片描述

1.1.3.7要passwd中以bash结尾的第4列往后的全部列

[root@hadoop100 scripts]# cat /etc/passwd | grep bash$ | cut -d “:” -f 4-

在这里插入图片描述

1.1.3.8要passwd中以bash结尾的第4列之前的全部列

[root@hadoop100 scripts]# cat /etc/passwd | grep bash$ | cut -d “:” -f -4

在这里插入图片描述

1.1.3.9选取系统 PATH 变量值,第 2 个“:”开始后的所有路径:

[root@hadoop100 scripts]# echo $PATH | cut -d “:” -f 3-

在这里插入图片描述

1.1.3.10切割 ifconfig 后打印的 IP 地址

[root@hadoop100 scripts]# ifconfig ens33 | grep netmask | cut -d " " -f 10

为什么是10呢,因为inet前面有8个空格
在这里插入图片描述

1.2awk

awk和gawk是一样的,awk是gawk的一个软连接
一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。

1.2.1基本用法

awk [选项参数] ‘/pattern1/{action1} /pattern2/{action2}…’ filename
pattern:表示 awk 在数据中查找的内容,就是匹配模式
action:在找到匹配内容时所执行的一系列命令

1.2.2选项参数说明

选项参数功能
-F指定输入文件分隔符
-v赋值一个用户定义变量

1.2.3案例

1.2.3.1搜索 passwd 文件以 root 关键字开头的所有行,并输出该行的第 7 列

在这里插入图片描述

1.2.3.2搜索 passwd 文件以 root 关键字开头的所有行,并输出该行的第 1 列和第 7 列, 中间以“,”号分割

用cut是不能改变输出中间用什么隔开的,而awk可以,记住,需要用“”包裹
在这里插入图片描述

1.2.3.3只显示/etc/passwd 的第一列和第七列,以逗号分割,且在所有行前面添加列名 user,shell 在最后一行添加"end of file"

[root@hadoop100 scripts]# cat /etc/passwd | awk -F “:” ‘BEGIN{print “user,shell”}{print $1","$7} END{print “end of file”}’

在这里插入图片描述

在这里插入图片描述

1.2.3.4将 passwd 文件中的用户 id 增加数值 1 并输出

在这里插入图片描述

在这里插入图片描述

因为{}里面是代码块,可以直接在里面更改

在这里插入图片描述

如果{}代码块里的代码多了,需要更改会很麻烦,因此使用-v,这样的话在外面一改数字代码块里面的代码就都改了

1.2.4awk 的内置变量

变量说明
FILENAME文件名
NR已读的记录数(行号)
NF浏览记录的域的个数(切割后,列的个数)
1.2.4.1统计 passwd 文件名,每行的行号,每行的列数

[root@hadoop100 scripts]# awk -v i=1 -F “:” ‘{print “文件名:” FILENAME “行号:” NR “列数:” NF}’ /etc/passwd

在这里插入图片描述

1.2.4.2查询 ifconfig 命令输出结果中的空行所在的行号

[root@hadoop100 scripts]# ifconfig | grep -n ^$

在这里插入图片描述
用之前的方法输出会有":",但是结果不想要,用awk解决

[root@hadoop100 scripts]# ifconfig | awk ‘/^$/ {print NR}’

在这里插入图片描述

也可以随意加东西

[root@hadoop100 scripts]# ifconfig | awk ‘/^$/ {print "空行:"NR}’

在这里插入图片描述

1.2.4.3切割 IP

使用cut时-f后需要数前面那一堆空格

在这里插入图片描述

使用awk后,前面那一堆空格是不需要数的
在这里插入图片描述

如果想看更详细的Shell总结请到我之前写的博客http://t.csdn.cn/cQArA

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Redamancy_06

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值