[Shell]尚硅谷大数据技术之Shell--笔记(3)

本文介绍Linux环境下Shell工具cut、sed及awk的基本用法与实践案例,帮助读者掌握文本处理技巧。

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

Shell工具

1、cut

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

(1)基本用法

cut [选项参数] filename

说明:默认分隔符是制表符

(2)选项参数说明

-f 列号,提取第几列

-d分隔符,按照指定分隔符分割列

(3)案例实操

$ cat text
ggagsga xggdsgs
hshx ssr
gsgs
hshshsh gsgs

$ cut -f 1 -d ' ' text #取出第一列
ggagsga
hshx
gsgs
hshshsh

$ cat text |grep hshx|cut -f 1 -d ' ' #取出hshx
hshx

$ echo $PATH |cut -d : -f 2- #选取系统PATH变量值,第二个“:”开始后的所有路径

$ ifconfig eno1|grep inet|cut -d ' ' -f 10-11 #切出ip地址,非标准,每个人的ifconfig显示的内容格式都不太一样

2、sed

sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区,称为“模式空间”,接着用sed命令处理缓冲区的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出

(1)基本用法

sed [选项参数] 'command' filename

(2)选项参数说明

-e 直接在指令列模式上进行sed的动作编辑

(3)命令功能描述(常用)

a 新增,a的后面可以接字符串,在下一行出现

d 删除

s 查找并替换

(4)案例实操

a)数据准备

step1:数据准备
 
$ touch sed.txt
$ vim sed.txt
dong shen
guan zhen
wo   wo
lai  lai

le   le

$

b)将“mei nv"这个单词插入到sed.txt第二行下,打印

$ sed '2a mei nv' sed.txt
dong shen
guan zhen
mei nv
wo   wo
lai  lai

le   le

$

c)删除sed.txt文件所有包含wo的行

$ sed '/wo/d' sed.txt
dong shen
guan zhen
lai  lai

le   le

$

3)将sed.txt文件中wo替换为ni

$ sed 's/wo/ni/g' sed.txt
dong shen
guan zhen
ni   ni
lai  lai

le   le

$

4)将sed.txt文件中的第二行删除并将wo替换为ni

$ sed -e '2d' -e 's/wo/ni/g' sed.txt 
dong shen
ni   ni
lai  lai

le   le

$

3、awk

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

(1)基本用法

awk [选项参数] 'pattern{action1} pattern2{action2}...' filename

pattern:表示AWK在数据中查找的内容,就是匹配模式

action:在找到匹配内容时所执行的一系列命令

(2)选项参数说明

-F 指定输入文件折分隔符

-v 赋值一个用户定义变量

(3)案例实操

1)数据准备

$ ps -ef >awk.txt

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

$ awk '/^root/{print $7}' awk.txt

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

$ awk '/^root/{print $1","$7}' awk.txt

3)只显示awk.txt的第一列和第七列,以逗号分割,且在所有行前面添加列名user,time最后一行添加”dahaige,00:00:23"

$ awk 'BEGIN{print "user,name"} {print $1","$7} END{print "dahaige,00:00:23"}' awk.txt

4)将awk.txt文件中的用户id增加数值1并输出

awk -v i=1 '{print $2+i}' awk.txt

(4)awk的内置函数

FILENAME 文件名

NR 已读的记录数

NF 浏览记录的域的个数(切割后,列的个数)

(5)案例实操

1)统计awk.txt文件名,每行的行号,每行的列数

$ awk '{print "filename:"FILENAME",""lines:"NR",""columns:"NF}' awk.txt

2)切割IP

$ ifconfig eno1|grep inet|awk '{print $2}'

3)查询sed.txt中所有的空行所在的行号

$ awk '/^$/ {print NR}' sed.txt 

补充:^ 匹配字符串开始的位置,$ 匹配字符串结束的位置

4、sort

sort命令在Linux中里非常有用的,它将文件进行排序,并将排序结果标准输出。

(1)基本语法

sort (选项) (参数)

-n 依照数值的大小排序

-r 以相反的顺序来排序

-t 设置排序时所用的分隔字符

-k 指定需要排序的列

(2)案例实操

1)数据准备

bb:40:5.4
gs:452:53.3
xgh:42:3.4
hh:22:1.2

2)按照”:“分割后的第三列倒序排序

$ sort -t : -nrk 3 sort.sh
gs:452:53.3
bb:40:5.4
xgh:42:3.4
hh:22:1.2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值