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

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

@[toc]
如果想看更详细的Shell总结请到我之前写的博客https://blog.csdn.net/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

相关文章
|
6月前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
561 2
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
11月前
|
Linux Shell
shell_42:Linux参数移动
总的来说,参数移动是Linux shell脚本中的一个重要概念,掌握它可以帮助我们更好地处理和管理脚本中的参数。希望这个解释能帮助你理解和使用参数移动。
249 18
|
存储 Java Shell
Shell 变量
10月更文挑战第2天
212 1
shell脚本变量 $name ${name}啥区别
shell脚本变量 $name ${name}啥区别
|
Java Shell Linux
Shell 变量设置
Shell设置变量
243 5
|
Shell 数据处理 C++
【震撼揭秘】Python正则VS Shell正则:一场跨越编程边界的史诗级对决!你绝不能错过的精彩较量,带你领略文本处理的极致魅力!
【8月更文挑战第19天】正则表达式是文本处理的强大工具,在Python与Shell中有广泛应用。两者虽语法各异,但仍共享许多基本元素,如`.`、`*`及`[]`等。Python通过`re`模块支持丰富的功能,如非捕获组及命名捕获组;而Shell则依赖`grep`、`sed`和`awk`等命令实现类似效果。尽管Python提供了更高级的特性和函数,Shell在处理文本文件方面仍有其独特优势。选择合适工具需根据具体需求和个人偏好决定。
196 1
|
Shell
[shell]在curl测试的data参数中引用变量
[shell]在curl测试的data参数中引用变量
737 1
|
Java Shell Linux
Shell 变量设置25-1
Shell编程语言是一种非类型的解释型语言,无需像C++/Java那样事先声明变量。通过赋值即可定义变量,在Linux支持的所有Shell中均适用。变量分为局部变量与环境变量,前者仅限于定义脚本内使用,后者可在其派生的子进程中使用。常见系统变量如$0表示当前程序名称,$n表示第n个参数(n=1,2,...,9),$*代表所有参数,$#代表参数个数,$?表示命令执行后的状态(0为成功),$UID为当前用户ID,$PWD表示当前目录。定义变量如`A=123`,
155 0
|
6月前
|
存储 安全 Unix
七、Linux Shell 与脚本基础
别再一遍遍地敲重复的命令了,把它们写进Shell脚本,就能一键搞定。脚本本质上就是个存着一堆命令的文本文件,但要让它“活”起来,有几个关键点:文件开头最好用#!/usr/bin/env bash来指定解释器,并用chmod +x给它执行权限。执行时也有讲究:./script.sh是在一个新“房间”(子Shell)里跑,不影响你;而source script.sh是在当前“房间”里跑,适合用来加载环境变量和配置文件。
568 9