Shell好用的工具: cut

目标

使用cut可以切割提取指定列\字符\字节的数据

介绍

cut 译为“剪切, 切割” , 是一个强大文本处理工具,它可以将文本按列进行划分的文本处理。cut命令逐行读入文本,然后按列划分字段并进行提取、输出等操作。

语法

cut [options]  filename

options参数说明

选项参数功能
-f 提取范围列号,获取第几列
-d 自定义分隔符自定义分隔符,默认为制表符。
-c 提取范围以字符为单位进行分割
-b 提取范围以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-n与“-b”选项连用,不分割多字节字符;

提取范围说明

提取范围说明
n-提取指定第n列或字符或字节后面所有数据
n-m提取指定第n列或字符或字节到第m列或字符或字节中间的所有数据
-m提取指定第m列或字符或字节前面所有数据
n1,n2,...提前指定枚举列的所有数据

示例:切割提取指定列数据

cut1.txt文件数据准备

touch cut1.txt

编辑文件添加内容

AA  itxinzhi 11 XX
BB  itcast 22 XXX
CC  Shell 33 XXXX
DD  it 44 XXXXXXX

提取文件中第一列数据

cut cut1.txt -d " " -f 1

提取文件中第一列,第三列, 枚举查找

cut cut1.txt -d " " -f 1,3

提取文件中第二列,第三列,第四列, 范围查找

cut cut1.txt -d " " -f 2-5

提取文件中第一列后面所有列的数据

 cut cut1.txt -d " "  -f 2- 

提起文件中结束列前面所有列的数据

cut -d " " -f -2 cut1.txt
# -2 提取指定列前面所有列数据

运行效果

示例: 切割提取指定字符数据

提取每行前4个字符

cut cut1.txt -c1-4

运行效果

提取每行第4个字符以后的数据

cut cut1.txt -c 4-

运行效果

提取每行第3个字符前面所有字符

cut cut1.txt -c -3

运行效果

示例:切割提取指定字节数据

提取字符串"abc传智播客" 前3个字节

echo "abc传智播客" | cut -b -3

运行效果

提取字符串"abc传智播客" 前4个字节

echo "abc传智播客" | cut -b -4

运行效果

提取字符串"abc传智播客" 前6个字节

echo "abc传智播客" | cut -b -6
# 由于linux系统默认utf-8码表, 所以一个汉字占3个字节

运行效果

提取字符串"abc传智播客" 前4个字节, 就可以将汉字 "传"输出,

echo "abc传智播客" | cut -nb -4
#  -n 取消多字节字符分割直接输出

运行效果

示例:切割提取指定单词数据

在cut1.txt文件中切割出"AA"

cat cut1.txt | grep itheima | cut -d " " -f 1

示例:切割提取bash进程的PID号

命令

ps -aux | grep 'bash' | head -n 1 | cut -d " " -f 8

运行效果

示例:切割提取IP地址

ifconfig | grep broadcast | cut -d " " -f 10

解决ifconfig

yum search idconfig
yum install net-tools.x86_64
ifconfig

运行效果

小结

cut的作用

一个强大文本处理工具,它可以将文本按列进行划分的文本处理。cut命令逐行读入文本,然后按列划分字段并进行提取、输出等操作。

cut切割提取列

cut 文件或数据 -d 分隔符切割 -f 提取第X列

cut切割提取字符

cut 文件或数据 -c 提取字符范围

cut切割提取字节

cut 文件或数据 -nb 提取直接范围

Shell好用的工具:sed

目标

使用sed编辑文件替换文件中的单词

编写在文件中插入或修改行的sed程序

使用sed作为过滤器来过滤管道数据命令

介绍

sed (stream editor, 流编辑器) 是Linux下一款功能强大的非交互流式文本编辑器(vim是交互式文本编辑器),可以对文本文件的每一行数据匹配查询之后进行增、删、改、查等操作,支持按行、按字段、按正则匹配文本内容,灵活方便,特别适合于大文件的编辑.

sed是一种流编辑器,它一次处理一行内容, 将这行放入缓存(存区空间称为:模式空间),然后才对这行进行处理,处理完后,将缓存区的内容发送到终端。

sed处理数据原理

语法

sed [选项参数] [模式匹配/sed程序命令] [文件名]
​
# 模式匹配,sed会读取每一行数据到模式空间中, 之后判断当前行是否符合模式匹配要求,符合要求就会
#     执行sed程序命令, 否则不会执行sed程序命令;如果不写匹配模式,那么每一行都会执行sex程序命令

选项参数说明

选项参数功能
-e直接在指令列模式上进行sed的动作编辑。它告诉sed将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时才需要使用-e选项;一行命令语句可以执行多条sed命令
-i直接对内容进行修改,不加-i时默认只是预览,不会对文件做实际修改
-f后跟保存了sed指令的文件
-n取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行
-r ruguler使用扩展正则表达式,默认情况sed只识别基本正则表达式 *

sed程序命令功能描述

命令功能描述
aadd新增,a的后面可以接字串,在下一行出现
cchange更改, 更改匹配行的内容
ddelete删除, 删除匹配的内容
iinsert插入, 向匹配行前插入内容
pprint打印, 打印出匹配的内容,通常与-n选项和用
ssubstitute替换, 替换掉匹配的内容
=用来打印被匹配的行的行号
n读取下一行,遇到n时会自动跳入下一行

特殊符号

命令功能描述
!就像一个sed命令,放在限制条件后面, 对指定行以外的所有行应用命令(取反)
{sed命令1;sed命令2}多个命令操作同一个的行

数据准备

sed.txt文件内容

ABC
itxinzhi itxinzhi
itcast
123
itxinzhi

示例:向文件中添加数据

演示1: 指定行号的前或后面添加数据

向第三行后面添加hello

 sed '3ahello' sed.txt

3 , 代表第三行

a, 代表在后面添加, 出现在下一行

注意这里没有修改源文件

运行效果

向第三行前面添加hello

 sed '3ihello' sed.txt

3 , 代表第三行

i, 代表在前面添加, 出现在上一行

注意这里没有修改源文件

运行效果

演示2: 指定内容前或后面添加数据

向内容 itxinzhi后面添加hello,如果文件中有多行包括 ``itxinzhi `,则每一行后面都会添加

sed '/itxinzhi/ahello' sed.txt

运行效果

向内容 itxinzhi 前面添加hello,如果文件中有多行包括 ``itxinzhi `,则每一行前面都会添加

sed '/itxinzhi/ihello' sed.txt

运行效果

演示3: 在最后一行前或后添加hello

在最后一行后面添加hello

sed '$ahello' sed.txt

$a: 最后一行后面添加

运行效果

在最后一行前面添加hello

sed '$ihello' sed.txt

$i: 最后一行前面添加

运行效果

示例: 删除文件中的数据

演示1: 删除第2行

命令

sed  '2d' sed.txt
# d 用于删除
# 2d 删除第2行

运行效果

命令: 删除第1行,第4行数据

sed '1d;4d' sed.txt

运行效果

演示2: 删除奇数行

从第一行开始删除,每隔2行就删掉一行

sed '1~2d' sed.txt
# 1~2 从第1行开始, 每隔2行

运行效果

演示3: 删除指定范围的多行数据

删除从第1行到第3行的数据

sed '1,3d' sed.txt
# 1,3  从指定第1行开始到第3行结束

运行效果

演示3: 删除指定范围取反的多行数据

删除从第1行到第3行取反的数据

sed '1,3!d' sed.txt
# 1,3! 从指定第1行开始到第3行结束取反, 就是不在这个范围的行

运行效果

演示4: 删除最后一行

命令

sed  '$d'   sed.txt

运行效果

演示5: 删除匹配itheima的行

命令

sed '/itheima/d' sed.txt

运行效果

演示6: 删除匹配行到最后一行

删除匹配itxinzhi行到最后一行 , 命令

sed '/itxinzhi/,$d' sed.txt
# , 代表范围匹配

运行效果

演示7: 删除匹配行及其后面一行

删除匹配itxinzhi行及其后面一行

sed '/itxinzhi/,+1d' sed.txt

运行效果

演示9: 删除不匹配的行

删除不匹配 itxinzhi或itcast` 的行

sed '/itxinzhi\|itcast/!d' sed.txt
​
# \| 是正则表达式的或者 这里|需要转义, 所以为\|
# ! 取反

运行效果

示例:更改文件中的数据

演示1:将文件的第一行修改为hello

命令

sed  '1chello'  sed.txt

运行效果

演示2: 将包含itxinzhi的行修改为hello

命令

sed  '/itxinzhi/chello' sed.txt

运行效果

演示3: 将最后一行修改为hello

命令

sed '$chello' sed.txt

运行效果

演示4: 将文件中的itxinzhi替换为hello

将文件中的itxinzhi替换为hello,默认只替换每行第一个itheima

sed 's/itxinzhi/hello/'  sed.txt

运行效果

注意 's/itxinzhi/hello/' 最后一个/ 不可少

将文本中所有的itxinzhi都替换为hello, 全局替换

sed 's/itxinzhi/hello/g'  sed.txt
# g 代表匹配全局所有符合的字符

演示5: 替换后的内容写入文件

将每行中第二个匹配的itxinzhi替换为hello , 将替换后的内容写入到sed2.txt文件中

# 第一种方式
sed -n 's/itxinzhi/hello/2pw sed2.txt' sed.txt
# w写入
# p打印, -n只是获取
​
# 第二种方式
sed -n 's/itxinzhi/hello/2p ' sed.txt > sed2.txt

运行效果

演示6: 正则表达式匹配替换

匹配有 i 的行,替换匹配行中 t 后的所有内容为空

sed '/i/s/t.*//g' sed.txt
# /t.*/ 表示逗号后的所又内容

运行效果

演示7: 每行末尾拼接test

sed 's/$/& test/' sed.txt
# & 用于拼接

运行效果

演示8: 每行行首添加注释 #

命令

sed 's/^/#/' sed.txt

运行效果

示例: 查询文件或管道中的数据

需求1: 查询含有 itcast 的行数据

命令

sed -n '/itcast/p' sed.txt

运行效果

需求2: 管道过滤查询

管道查询所有进程中含有sshd的进程信息命令

 ps -aux | sed -n '/sshd/p'

运行效果

示例: 多个sed程序命令执行

将sed.txt文件中的第1行删除并将 itxinzhi 替换为 itcast

# 第一种方式, 多个sed程序命令 在每个命令之前使用 -e 参数
sed -e '1d' -e 's/itxinzhi/itcast/g' sed.txt 
​
# 第二种方式
sed  '1d;s/itxinzhi/itcast/g' sed.txt

运行效果

sed高级用法: 缓存区数据交换

模式空间与暂存空间介绍

  1. 首先需要明白, sed处理文件是逐行处理的, 即读取一行处理一行,输出一行;

  2. sed把文件读出来每一行存放的空间叫模式空间, 会在该空间中对读到的内容做相应处理;

  3. 此外sed还有一个额外的空间即暂存空间, 暂存空间刚开始里边只有个空行, 记住这一点;

  4. sed可使用相应的命令从模式空间往暂存空间放入内容或从暂存空间取内容放入模式空间;

    2个缓存空间传输数据的目的是为了更好的处理数据, 一会参考案例学习

关于缓存区sed程度命令

命令含义
h模式空间里面的内容复制到暂存空间缓存区(覆盖方式)
H模式空间里面的内容复制到暂存空间缓存区(追加方式)
g暂存空间里面的内容复制到模式空间缓存区(覆盖方式)
G暂存空间里面的内容复制到模式空间缓存区(追加方式)
x交换2个空间的内容

示例: 缓存空间数据交换

演示1: 第一行粘贴到最后1行

将模式空间第一行复制到暂存空间(覆盖方式),并将暂存空间的内容复制到模式空间中的最后一行(追加方式)

sed '1h;$G' sed.txt
# 1h 从模式空间中将第一行数据复制到暂存空间(覆盖方式)
# $G 将暂存空间中的内容复制到模式空间中最后一行(追加方式)

运行效果

演示2: 第一行删除后粘贴到最后1行

将模式空间第一行复制到暂存空间(覆盖方式)并删除, 最后将暂存空间的内容复制到模式空间中的最后一行(追加方式)

sed '1{h;d};$G' sed.txt
# 1{h;d}对模式空间中的第一行数据同时进行复制到暂存空间(覆盖方式)和删除模式空间中的第一行数据

运行效果

演示3: 第一行数据复制粘贴替换其他行数据

将模式空间第一行复制到暂存空间(覆盖方式), 最后将暂存空间的内容复制到模式空间中替换从第2行开始到最后一行的每一行数据(覆盖方式)

sed '1h;2,$g' sed.txt

运行命令

演示4: 将前3行数据数据复制粘贴到最后一行

将前3行数据复制到暂存空间(追加方式), 之后将暂存空间的所有内容复制粘贴到模式空间最后一行(追加方式)

sed '1,3H;$G' sed.txt

运行效果

示例: 给每一行添加空行

插入空行

sed G -i sed.txt
# G 每行后面添加一个空行
# -i 修改源文件

运行效果

示例: 删除所有的空行

命令

sed -i '/^$/d' sed.txt

运行效果

Shell好用的工具:awk

介绍

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理, 因为切开的部分使用awk可以定义变量,运算符, 使用流程控制语句进行深度加工与分析。

创始人 Alfred V. Aho、Peter J. Weinberger和Brian W. Kernighan awk由来是姓氏的首字母

语法

awk [options] 'pattern{action}' {filenames}

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

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

选项参数说明

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

awk内置变量

内置变量含义
ARGC命令行参数个数
ARGV命令行参数排列
ENVIRON支持队列中系统环境变量的使用
FILENAMEawk浏览的文件名
FNR浏览文件的记录数
FS设置输入域分隔符,等价于命令行 -F选项
NF浏览记录的域的个数, 根据分隔符分割后的列数
NR已读的记录数, 也是行号
OFS输出域分隔符
ORS输出记录分隔符
RS控制记录分隔符
$n$0变量是指整条记录。$1表示当前行的第一个域,$2表示当前行的第二个域,......以此类推。
$NF$NF是number finally,表示最后一列的信息,跟变量NF是有区别的,变量NF统计的是每行列的总数

数据准备

cp /etc/passwd ./

示例 : 默认每行空格切割数据

命令

echo "abc 123 456" | awk '{print $1"&"$2"&"$3}'

运行效果

示例: 打印含有匹配信息的行

搜索passwd文件有root关键字的所有行

awk '/root/' passwd
# '/root/' 是查找匹配模式, 没有action命令, 默认输出所有符合的行数据

运行效果

示例: 打印匹配行中第7列数据

搜索passwd文件有root关键字的所有行, 然后以":"拆分并打印输出第7列

awk -F: '/root/{print $7}' passwd
# -F: 以':'分隔符拆分每一个列(域)数据

运行效果

示例: 打印文件每行属性信息

统计passwd: 文件名,每行的行号,每行的列数,对应的完整行内容:

awk -F ':' '{print "文件名:" FILENAME ",行号:" NR ",列数:" NF ",内容:" $0}' passwd
# "文件名:" 用于拼接字符串

运行效果

使用printf替代print,可以让代码阅读型更好

awk -F ':' '{printf("文件名:%5s,行号:%2s, 列数:%1s, 内容:%2s\n",FILENAME,NR,NF,$O)}' passwd
# printf(格式字符串,变量1,变量2,...)
# 格式字符串: %ns 输出字符串,n 是数字,指代输出几个字符, n不指定自动占长度
# 格式字符串: %ni 输出整数,n 是数字,指代输出几个数字
# 格式字符串: %m.nf 输出浮点数,m 和 n 是数字,指代输出的整数位数和小数位数。如 %8.2f 代表共输出 8 位数,其中 2 位是小数,6 位是整数;

运行效果

示例: 打印第二行信息

打印/etc/passwd/的第二行信息

awk -F ':' 'NR==2{printf("filename:%s,%s\n",FILENAME,$0)}' passwd

运行效果

示例: 查找以c开头的资源

awk过滤的使用, 查找当前目录下文件名以c开头的文件列表

ls -a | awk '/^c/'

运行效果

示例: 打印第一列

按照":" 分割查询第一列打印输出

awk -F ':' '{print $1}' passwd

运行效果

示例: 打印最后1列

按照":" 分割查询最后一列打印输出

awk -F: '{print $NF}' passwd

运行效果

示例: 打印倒数第二列

按照":" 分割查询倒数第二列打印输出

 awk -F: '{print $(NF-1)}' passwd# $(NF-N) N是几, 就是倒数第几列

运行效果

示例: 打印10到20行的第一列

获取第10到20行的第一列的信息

awk -F: '{if(NR>=10 && NR<=20) print $1}' passwd

运行效果

示例: 多分隔符使用

"one:two/three"字符串按照多个分隔符":"或者"/" 分割, 并打印分割后每个列数据

echo "one:two/three" | awk -F '[:/]' '{printf("%s\n%s\n%s\n%s\n",$0,$1,$2,$3)}'

运行效果

示例: 添加开始与结束内容

给数据添加开始与结束

echo -e  "abc\nabc" | awk 'BEGIN{print "开始..."} {print $0} END{print "结束..."}'
​
# BEGIN 在所有数据读取行之前执行;END 在所有数据执行之后执行。

运行效果

示例 : 使用循环拼接分割后的字符串

"abc itxinzhi itcast 21" 使用空格分割后, 通过循环拼接在一起

 echo "abc itxinzhi     itcast   21" | awk -v str="" -F '[ ]+' '{for(n=1;n<=NF;n++){ str=str$n} print str }'# -v 定义变量

运行效果

示例: 操作指定数字运算

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

echo "2.1" | awk -v i=1 '{print $0+i}'

运行效果

示例: 切割ip

切割IP

ifconfig | awk '/broadcast/{print}' | awk -F " " '{print $2}'

运行效果

示例: 显示空行行号

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

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

运行效果

小结

grep , sed ,awk , cut 文本字符串操作四剑客的区别

grep:用于查找匹配的行

cut: 截取数据. 截取某个文件中的列, 重点是按照列分割, 这个命令不适合截取文件中有多个空白字符的字段

sed: 增删改查数据. sed用于在文件中以行来截取数据进行增\删\改\查

awk:截取分析数据. 可以在某个文件中是以竖列来截取分析数据, 如果字段之间含有很多空白字符也可以获取需要的数据, awk是一种语言,可以深入分析文件数据

Shell好用的工具:sort

目标

能够使用sort对字符串升序或降序排序

能够使用sort 对数字升序或降序

能够使用sort 对多列进行排序

介绍

sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出或重定向输出到指定文件。

语法

sort (options) 参数
选项说明
==-n==number,依照数值的大小排序
==-r==reverse, 以相反的顺序来排序
==-t 分隔字符==设置排序时所用的分隔字符, 默认空格是分隔符
==-k==指定需要排序的列
-d排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
-f排序时,将小写字母视为大写字母
-b忽略每行前面开始出的空格字符
==-o 输出文件==将排序后的结果存入指定的文件
-u意味着是唯一的(unique),输出的结果是去完重了的
-m将几个排序好的文件进行合并

参数:指定待排序的文件列表

数据准备

sort.txt文本文件代码

张三 30  
李四 95  
播仔 85 
播仔 85
播仔 86
AA 85
播妞 100

示例1: 数字升序

按照“ ”空格分割后的第2列数字升序排序。

sort -t " " -k2n,2 sort.txt
# -t " " 代表使用空格分隔符拆分列
# -k 2n,2 代表根据从第2列开始到第2列结束进行数字升序, 仅对第2列排序

运行效果

示例2: 数字升序去重

先按照“ ”空格分割后的, 然后,按照第2列数字升序排序, 最后对所有列去重

 sort -t " " -k2n,2 -uk1,2 sort.txt

运行效果

注意: 先排序再去重

示例3: 数字升序去重结果保存到文件

命令

sort -t " " -k2n,2 -uk1,2 -o sort2.txt sort.txt

运行效果

示例4: 数字降序去重

先按照“ ”空格分割后的, 然后,按照第2列数字降序排序, 最后对所有列去重

sort -t " " -k2nr,2 -uk1,2 sort.txt

运行效果

示例5: 多列排序

数据准备sort3.txt

公司A,部门A,3
公司A,部门B,0
公司A,部门C,10
公司A,部门D,9
公司B,部门A,30
公司B,部门B,40
公司B,部门C,43
公司B,部门D,1
公司C,部门A,30
公司C,部门B,9
公司C,部门C,100
公司C,部门D,80
公司C,部门E,60

要求: 以","分割先对第一列字符串升序, 再对第3列数字降序

sort -t "," -k1,1 -k3nr,3 sort3.txt

运行效果

小结

能够使用sort对字符串升序或降序排序

字符串升序: sort -kstart,end 文件

字符串降序: sort -kstartr,end 文件

能够使用sort 对数字升序或降序

数字升序: sort -kstartn,end 文件

数字降序: sort -kstartnr,end 文件

能够使用sort 对多列进行排序

sort -kstart[nr],end -kstart[nr],end ... 文件

面试题:查空行

问题:使用Linux命令查询file.txt中空行所在的行号

file1.txt数据准备

itxinzhi itxinzhi
​
itcast
123
​
itxinzhi

答案:

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

运行效果

面试题:求一列的和

问题:有文件file2.txt内容如下:

张三 40
李四 50
王五 60

使用Linux命令计算第二列的和并输出

awk '{sum+=$2} END{print "求和: "sum}' file2.txt

运行效果

面试题:检查文件是否存在

问题:Shell脚本里如何检查一个文件是否存在?如果不存在该如何处理?

答:

if [ -e /root/file1.txt ]; then  echo "文件存在"; else echo "文件不存在"; fi

运行效果

面试题:数字排序

问题:用shell写一个脚本,对文本中无序的一列数字排序

cat file3.txt文件内容

9
8
7
6
5
4
3
2
10
1

sort -n file3.txt | awk '{sum+=$1; print $1} END{print "求和: "sum}'

运行效果

面试题:搜索指定目录下文件内容

问题:请用shell脚本写出查找当前文件夹(/root)下所有的文本文件内容中包含有字符”123”的文件名称?

答:

grep -r "123" /root | cut -d ":" -f 1| sort -u

运行效果

面试题:批量生成文件名

问题: 批量生产指定数目的文件,文件名采用"纳秒"命名

答: file4.sh

#!/bin/bash
read -t 30 -p "请输入创建文件的数目:" n
test=$(echo $n | sed 's/[0-9]//g') #检测非数字输入
if [ -n "$n" -a -z "$test" ] #检测空输入
thenfor ((i=0;i<$n;i=i+1 ))doname=$(date +%N)[ ! -d ./temp ] &&  mkdir -p ./temptouch "./temp/$name"echo "创建 $name 成功!"doneelseecho "创建失败"exit 1
fi

运行效果

面试题:批量改名

问题: 将/root/temp目录下所有文件名重命名为"旧文件名-递增数字"?

重命名命令

rename 旧文件名 新文件名 旧文件所在位置

脚本代码file5.sh

#!/bin/bash
filenames=$(ls /root/temp)
number=1
for name in $filenames
doprintf "命令前:%s" ${name}newname=${name}"-"${number}rename $name ${newname} /root/temp/*let number++ #每个改名后的文件名后缀数字加1printf "重命名后:%s \n" ${newname}
done

运行效果

面试题:批量创建用户

问题: 根据users.txt中提供的用户列表,一个名一行, 批量添加用户到linux系统中

已知users.txt数据准备

user1
user2

知识点分析1: 添加用户命令

useradd 用户名

知识点分析2: 设置每个用户密码默认密码

echo "123456" | passwd --stdin 用户名

运行效果

面试题答案: 脚本代码file6.sh

#!/bin/bash
ULIST=$(cat /root/users.txt)  ##/root/users.txt  里面存放的是用户名,一个名一行
for UNAME in $ULIST
douseradd $UNAMEecho "123456" | passwd --stdin $UNAME &>/dev/null[ $? -eq 0 ] && echo "$UNAME用户名与密码添加初始化成功!"
done

运行效果

面试题:筛选单词

问题: 根据给出的数据输出里面单词长度大于3的单词

数据准备

I may not be able to change the past, but I can learn from it.

shell脚本file7.sh

echo "I may not be able to change the past, but I can learn from it." | awk -F "[ ,.]" '{for(i=1;i<NF;i++){ if(length($i)>3){print $i}}}'

运行效果

面试题:单词及字母去重排序

问题

1、按单词出现频率降序排序!
2、按字母出现频率降序排序!

file8.txt 文件内容

No. The Bible says Jesus had compassion2 on them for He saw them as sheep without a shepherd. They were like lost sheep, lost in their sin. How the Lord Jesus loved them! He knew they were helpless and needed a shepherd. And the Good Shepherd knew He had come to help them. But not just the people way back then. For the Lord Jesus knows all about you, and loves you too, and wants to help you.

按照单词出现频率降序

awk -F "[,. ]+" '{for(i=1;i<=NF;i++)S[$i]++}END{for(key in S)print S[key],key}' file8.txt |sort -rn|head

运行效果

按照字符出现频率降序前10个

awk -F "" '{for(i=1;i<=NF;i++)S[$i]++}END{for(key in S)print S[key],key}' file8.txt |sort -rn|head

运行效果

面试题:MySQL分库备份

#!/bin/sh
user=root      #用户名
pass=root      #密码
backfile=/root/mysql/backup #备份路径
[ ! -d $backfile ] && mkdir -p $backfile #判断是否有备份路径
cmd="mysql -u$user -p$pass"  #登录数据库
dump="mysqldump -u$user -p$pass " #mysqldump备份参数
dblist=`$cmd -e "show databases;" 2>/dev/null |sed 1d|egrep -v "_schema|mysql"` #获取库名列表
echo "需要备份的数据列表:"
echo $dblist
echo "开始备份:"
for db_name in $dblist #for循环备份库列表
doprintf '正在备份数据库:%s' ${db_name}$dump $db_name 2>/dev/null |gzip >${backfile}/${db_name}_$(date +%m%d).sql.gz #库名+时间备份打包至指定路径下printf ',备份完成\n'
done
echo "全部备份完成!!!"

面试题:MySQL数据库分库分表备份

#!/bin/sh
user=root      #用户名
pass=root      #密码
backfile=/root/mysql/backup #备份路径
[ ! -d $backfile ] && mkdir -p $backfile #判断是否有备份路径
cmd="mysql -u$user -p$pass"  #登录数据库
dump="mysqldump -u$user -p$pass " #mysqldump备份参数
dblist=`$cmd -e "show databases;" 2>/dev/null |sed 1d|egrep -v "_schema|mysql"` #获取库名列表
echo "需要备份的数据列表:"
echo $dblist
echo "开始备份:"
for db_name in $dblist #for循环备份库列表
doprintf '正在备份数据库:%s\n' ${db_name}tables=`mysql -u$user -p"$pass" -e "use $db_name;show tables;" 2>/dev/null|sed 1d`for j in $tablesdoprintf '正在备份数据库 %s 表 %s ' ${db_name} ${j}$dump -B --databases $db_name --tables $j 2>/dev/null > ${backfile}/${db_name}-${j}-`date +%m%d`.sqlprintf ',备份完成\n'done
​
​printf '数据库 %s 备份完成\n' ${db_name}
done
echo "全部备份完成!!!"

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

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

相关文章

树中枝繁叶茂:探索 B+ 树、B 树、二叉树、红黑树和跳表的世界

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 树中枝繁叶茂&#xff1a;探索 B 树、B 树、二叉树、红黑树和跳表的世界 前言B树和B树B树&#xff08;Binary Tree&#xff09;&#xff1a;B树&#xff08;B Plus Tree&#xff09;&#xff1a;应用场…

STM32Cubemx TB6612直流电机驱动

一、TB6612FNG TB6612是一个支持双电机的驱动模块&#xff0c;支持PWM调速。PWMA、AIN1、AIN2 为一组控制引脚&#xff0c;PWMA 为 PWM 速度控制引脚&#xff0c;AIN1、AIN2 为方向控制引脚&#xff1b;PWMB、BIN1、BIN2 为一组控制引脚&#xff0c;PWMB 为 PWM 速度控制引脚&…

【力扣hot100】刷题笔记Day11

前言 科研不顺啊......又不想搞了&#xff0c;随便弄弄吧&#xff0c;多花点时间刷题&#xff0c;今天开启二叉树&#xff01; 94. 二叉树的中序遍历 - 力扣&#xff08;LeetCode&#xff09; 递归 # 最简单递归 class Solution:def inorderTraversal(self, root: TreeNode) …

idea运行项目时右下角弹出“Lombok requires enabled annotation processing”

文章目录 错误描述原因分析解决方式参考 错误描述 Lombok requires enabled annotation processing&#xff1a;翻译过来就是Lombok 需要启用注释处理 原因分析 idea安装了Lombok插件&#xff0c;但有些设置未做。 解决方式 参考 idea配置和使用Lombok

【FPGA】高云FPGA之数字钟实验->HC595驱动数码管

高云FPGA之IP核的使用 1、设计定义2、设计输入2.1 数码管译码显示2.2 74HC595驱动2.3 主模块设计 3、分析和综合4、功能仿真6.1 hex8模块仿真6.2 HC595模块 5、布局布线6、时序仿真7、IO分配以及配置文件&#xff08;bit流文件&#xff09;的生成8、配置&#xff08;烧录&#…

代码检测规范和git提交规范

摘要&#xff1a;之前开发的项目&#xff0c;代码检测和提交规范都是已经配置好的&#xff0c;最近自己新建的项目就记录下相关配置过程。 1. ESlint配置 2013年6月创建开源项目&#xff0c;提供一个插件化的JavaScript代码检测工具&#xff0c;创建项目是生成的eslintrc.js文…

【算法分析与设计】

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;算法分析与设计 ⛺️稳中求进&#xff0c;晒太阳 题目 编写一个函数&#xff0c;输入是一个无符号整数&#xff08;以二进制串的形式&#xff09;&#xff0c;返回其二进制表达式中数字位…

如何使用Express框架构建一个简单的Web应用

在这个数字化时代&#xff0c;Web应用的需求越来越多样化和复杂化。在前端开发领域&#xff0c;Express框架作为一个快速、灵活的Node.js Web应用程序框架&#xff0c;拥有强大的功能和丰富的生态系统&#xff0c;深受开发者们的青睐。本篇博客将带您一步步探索如何使用Express…

Bert基础(四)--解码器(上)

1 理解解码器 假设我们想把英语句子I am good&#xff08;原句&#xff09;翻译成法语句子Je vais bien&#xff08;目标句&#xff09;。首先&#xff0c;将原句I am good送入编码器&#xff0c;使编码器学习原句&#xff0c;并计算特征值。在前文中&#xff0c;我们学习了编…

代码随想录算法训练营第四十天|343. 整数拆分、96. 不同的二叉搜索树。

343. 整数拆分 题目链接&#xff1a;整数拆分 题目描述&#xff1a; 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 解题思路&#xff1a; 1、确定dp数组…

flink内存管理,设置思路,oom问题,一文全

flink内存管理 1 内存分配1.1 JVM 进程总内存&#xff08;Total Process Memory&#xff09;1.2 Flink 总内存&#xff08;Total Flink Memory&#xff09;1.3 JVM 堆外内存&#xff08;JVM Off-Heap Memory&#xff09;1.4 JVM 堆内存&#xff08;JVM Heap Memory&#xff09;…

运维的利器–监控–zabbix–第二步:建设–部署zabbix agent

文章目录 监控客户端部署及添加主机一、在 zabbix-server 安装客户端二、在本机和其他linux主机安装zabbix agent客户端1、安装2、配置3、启动并开机自启4、添加主机创建主机组创建主机等一会或重启zabbix-server查看配置是否成功 三、在其他windows上安装zabbix agent客户端下…

主流的开发语言和开发环境介绍

个人浅见&#xff0c;不喜勿喷&#xff0c;谢谢 软件开发是一个涉及多个方面的复杂过程&#xff0c;其中包括选择合适的编程语言和开发环境。编程语言是软件开发的核心&#xff0c;它定义了程序员用来编写指令的语法和规则。而开发环境则提供了编写、测试和调试代码的工具和平台…

Microsoft的PromptBench可以做啥?

目录 PromptBench简介 PromptBench的快速模型性能评估 PromptBench数据集介绍 PromptBench模型介绍 PromptBench模型加载遇到的问题 第一次在M1 Mac上加载模型 vicuna和llama系列模型 PromptBench各个模型加载情况总结 PromptBench的Prompt快速工程 chain of thought…

WebService学习,wsdl文件详解

目录 第一章、起因1.1&#xff09;学习原因1.2&#xff09;提问的过程&#xff08;逐步提出问题&#xff09;1、&#xff1f;wsdl链接的含义&#xff0c;有什么作用&#xff1f;2、什么是wsdl文档&#xff1f;3、如何阅读wsdl文件&#xff1f;4、wsdl文件有什么作用&#xff1f…

基于springboot+vue的智慧社区系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

(十四)【Jmeter】线程(Threads(Users))之开放模型线程组(Open Model Thread Group)

简述 操作路径如下: 开放模型线程组(Open Model Thread Group) 是 JMeter 5.5 版本中引入的一个新特性,它允许用户创建具有可变负载的负载配置文件。相较于传统的线程组,开放模型线程组提供了更多的灵活性和动态调整的能力。 优点: 灵活性:允许测试人员根据测试需求动…

python 提取PDF文字

使用pdfplumber&#xff0c;不能提取扫描的pdf和插入的图片。 import pdfplumberfile_path rD:\UserData\admindesktop\官方文档\1903_Mesh-Models-Overview_FINAL.pdf with pdfplumber.open(file_path) as pdf:page pdf.pages[0]print(page.extract_text()) # 所以文字prin…

Verilog刷题笔记33

题目&#xff1a; You are given a four-bit input vector in[3:0]. We want to know some relationships between each bit and its neighbour: out_both: Each bit of this output vector should indicate whether both the corresponding input bit and its neighbour to t…

Kafka3.x进阶

来源&#xff1a;B站 目录 Kafka生产者生产经验——生产者如何提高吞吐量生产经验——数据可靠性生产经验——数据去重数据传递语义幂等性生产者事务 生产经验——数据有序生产经验——数据乱序 Kafka BrokerKafka Broker 工作流程Zookeeper 存储的 Kafka 信息Kafka Broker 总…