Linux Shell编程入门到实战(六)

news2024/11/22 21:34:56

🍓 简介:java系列技术分享(👉持续更新中…🔥)
🍓 初衷:一起学习、一起进步、坚持不懈
🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏
🍓 希望这篇文章对你有所帮助,欢迎点赞 👍 收藏 ⭐留言 📝

🍓 更多文章请点击
在这里插入图片描述在这里插入图片描述

上篇请阅读:Linux Shell编程入门到实战(五)

文章目录

  • 一、 cut工具
    • 1. 示例:切割提取指定列数据
      • 1.1 提取文件中第一列数据
      • 1.2 提取文件中第一列,第三列, 枚举查找
      • 1.3 提取文件中第二列,第三列,第四列, 范围查找
      • 1.4 提取文件中第一列后面所有列的数据
      • 1.5 提起文件中结束列前面所有列的数据
    • 2 示例: 切割提取指定字符数据
      • 2.1提取每行前3个字符
      • 2.2 提取每行第4个字符以后的数据
      • 2.3 提取每行第3个字符前面所有字符
    • 3 示例:切割提取指定字节数据
      • 3.1 提取字符串"abc我在哪里" 前3个字节
      • 3.2 提取字符串"abc我在哪里" 前4个字节
      • 3.3 提取字符串"abc我在哪里" 前6个字节
      • 3.4 提取字符串"abc我在哪里" 前4个字节, 就可以将汉字 "我"输出,
    • 4 示例:切割提取指定单词数据
    • 5 示例:切割提取bash进程的PID号
    • 6 示例:切割提取IP地址
    • 7 小结
  • 二、Shell好用的工具:sed
    • 1. sed处理数据原理
    • 2. 数据准备
    • 3. 示例:向文件中添加数据
      • 3.1 演示1: 指定行号的前或后面添加数据
      • 3.2 演示2: 指定内容前或后面添加数据
      • 3.3 演示3: 在最后一行前或后添加hello
      • 3.4 演示4: 在最后一行前面添加hello
    • 4. 示例: 删除文件中的数据
      • 4.1 删除第2行
      • 4.2 删除第1行,第4行数据
      • 4.3 删除奇数行
      • 4.4 删除指定范围的多行数据
      • 4.5 删除指定范围取反的多行数据
      • 4.6 删除最后一行
      • 4.7 删除匹配xiaoming的行
      • 4.8 删除匹配行到最后一行
      • 4.9 删除匹配行及其后面一行
      • 4.10 删除不匹配的行
    • 5. 更改文件中的数据
      • 5.1 演示1:将文件的第一行修改为hello
      • 5.2 演示2 将包含xiaoming的行修改为hello
      • 5.3 演示3 将最后一行修改为hello
      • 5.4 演示4: 将文件中的lisi替换为hello
      • 5.5 演示5 将文本中所有的lisi都替换为hello, 全局替换
      • 5.6 演示6: 将每行中第二个匹配替换
      • 5.7 演示7: 替换后的内容写入文件
      • 5.8 演示8: 正则表达式匹配替换
      • 5.9 演示9: 每行行首添加注释 `#`
    • 6. 查询文件或管道中的数据
      • 6.1 需求1: 查询含有 `xiaoming` 的行数据
      • 6.2 需求2: 管道过滤查询
    • 7. 多个sed程序命令执行
    • 8. sed高级用法: 缓存区数据交换
      • 8.1 模式空间与暂存空间介绍
      • 8.2 关于缓存区sed程度命令
      • 8.3 示例: 缓存空间数据交换
        • 8.3.1 演示1: 第一行粘贴到最后1行
        • 8.3.2 演示2: 第一行删除后粘贴到最后1行
        • 8.3.3 演示3: 第一行数据复制粘贴替换其他行数据
        • 8.3.4 演示4: 将前3行数据数据复制粘贴到最后一行
        • 8.3.5 示例: 给每一行添加空行
        • 8.3.6 示例: 删除所有的空行
  • 三、 Shell好用的工具:awk
    • 1. 介绍
    • 2. 示例 : 默认每行空格切割数据
    • 3. 示例: 打印含有匹配信息的行
    • 4. 示例: 打印匹配行中第7列数据
    • 5. 示例: 打印文件每行属性信息
    • 6.示例: 打印第二行信息
    • 7. 示例: 查找以c开头的资源
    • 8. 示例: 打印第一列
    • 9. 示例: 打印最后1列
    • 10. 示例: 打印倒数第二列
    • 11. 示例: 打印10到20行的第一列
    • 12. 示例: 多分隔符使用
    • 13. 示例: 添加开始与结束内容
    • 14. 示例 : 使用循环拼接分割后的字符串
    • 15. 示例: 操作指定数字运算
    • 16. 示例: 切割ip
    • 18. 示例: 显示空行行号
    • 19. 小结
  • 四、Shell好用的工具:sort
    • 语法
    • 数据准备
    • 1. 示例1: 数字升序
    • 2. 示例2: 数字升序去重
    • 3. 示例3: 数字升序去重结果保存到文件
    • 4. 示例4: 数字降序去重
    • 5. 示例5: 多列排序
    • 6. 小结

在这里插入图片描述

一、 cut工具

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

cut [options]  filename

options参数说明

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

提取范围说明

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

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

cut1.txt文件数据准备

touch cut1.txt

编辑文件添加内容

AA  zhangsan11 XX
BB  lisi22 XXX
CC  Shell 33 XXXX
DD  it 44 XXXXXXX

1.1 提取文件中第一列数据

cut cut1.txt -d " " -f 1

在这里插入图片描述

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

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

在这里插入图片描述

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

在这里插入图片描述

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

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

在这里插入图片描述

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

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

运行效果

在这里插入图片描述

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

2.1提取每行前3个字符

cut cut1.txt -c1-3

运行效果

在这里插入图片描述

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

cut cut1.txt -c 4-

运行效果
在这里插入图片描述

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

cut cut1.txt -c -3

运行效果
在这里插入图片描述

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

3.1 提取字符串"abc我在哪里" 前3个字节

 echo "abc我在哪里" | cut -b -3

运行效果
在这里插入图片描述

3.2 提取字符串"abc我在哪里" 前4个字节

由于linux系统默认utf-8码表, 所以一个汉字占3个字节

echo "abc我在哪里" | cut -b -4

运行效果

在这里插入图片描述

3.3 提取字符串"abc我在哪里" 前6个字节

echo "abc我在哪里" | cut -b -6

运行效果
在这里插入图片描述

3.4 提取字符串"abc我在哪里" 前4个字节, 就可以将汉字 "我"输出,

-n 取消多字节字符分割直接输出

echo "abc我在哪里" | cut -nb -4
# 

运行效果
在这里插入图片描述

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

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

cat cut1.txt | grep zhangsan| cut -d " " -f 2

在这里插入图片描述

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

命令

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

运行效果

在这里插入图片描述

6 示例:切割提取IP地址

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

7 小结

cut的作用

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

cut切割提取列

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

cut切割提取字符

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

cut切割提取字节

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

二、Shell好用的工具:sed

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

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

1. 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}多个命令操作同一个的行

2. 数据准备

sed.txt文件内容

ABC
lisi lisi
xiaoming
123
xiaoming

3. 示例:向文件中添加数据

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


向第三行后面添加hello

 sed '3ahello' sed.txt

3 , 代表第三行

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

注意这里没有修改源文件

运行效果

在这里插入图片描述

向第三行前面添加hello

 sed '3ihello' sed.txt

3 , 代表第三行

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

注意这里没有修改源文件

运行效果

在这里插入图片描述

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

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

sed '/xiaoming/ahello' sed.txt

运行效果

在这里插入图片描述
向内容 xiaoming 前面添加 hello ,如果文件中有多行包括 ``xiaoming ,则每一行前面都会添加

sed '/xiaoming/ihello' sed.txt

运行效果

在这里插入图片描述

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

在最后一行后面添加hello

sed '$ahello' sed.txt

$a: 最后一行后面添加

运行效果
在这里插入图片描述

3.4 演示4: 在最后一行前面添加hello

sed '$ihello' sed.txt

$i: 最后一行前面添加

运行效果

在这里插入图片描述

4. 示例: 删除文件中的数据

4.1 删除第2行

命令

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

运行效果
在这里插入图片描述

4.2 删除第1行,第4行数据

sed '1d;4d' sed.txt

运行效果

在这里插入图片描述

4.3 删除奇数行

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

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

运行效果
在这里插入图片描述

4.4 删除指定范围的多行数据

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

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

运行效果

在这里插入图片描述

4.5 删除指定范围取反的多行数据

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

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

运行效果

在这里插入图片描述

4.6 删除最后一行

命令

sed  '$d'   sed.txt

运行效果
在这里插入图片描述

4.7 删除匹配xiaoming的行

命令

sed '/xiaoming/d' sed.txt

运行效果

在这里插入图片描述

4.8 删除匹配行到最后一行

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

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

运行效果

在这里插入图片描述

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

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

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

运行效果
在这里插入图片描述

4.10 删除不匹配的行

删除不匹配 xiaominglisi 的行

sed '/xiaoming\|lisi/!d' sed.txt

# \| 是正则表达式的或者 这里|需要转义, 所以为\|
# ! 取反

运行效果
在这里插入图片描述

5. 更改文件中的数据

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

命令

sed  '1chello'  sed.txt

运行效果
在这里插入图片描述

5.2 演示2 将包含xiaoming的行修改为hello

命令

sed  '/xiaoming/chello' sed.txt

运行效果

在这里插入图片描述

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

命令

sed '$chello' sed.txt

运行效果

在这里插入图片描述

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

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

sed 's/lisi/hello/'  sed.txt

运行效果

在这里插入图片描述

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

5.5 演示5 将文本中所有的lisi都替换为hello, 全局替换

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

在这里插入图片描述

5.6 演示6: 将每行中第二个匹配替换

将每行中第二个匹配的lisi替换为hello 命令

sed 's/lisi/hello/2'   sed.txt

运行效果

在这里插入图片描述

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

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

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

# 第二种方式
sed -n 's/lisi/hello/2p ' sed.txt > sed2.txt

运行效果

在这里插入图片描述

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

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

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

运行效果

在这里插入图片描述

5.9 演示9: 每行行首添加注释 #

命令

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

运行效果

在这里插入图片描述

6. 查询文件或管道中的数据

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

命令

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

运行效果
在这里插入图片描述

6.2 需求2: 管道过滤查询

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

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

运行效果

在这里插入图片描述

7. 多个sed程序命令执行

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

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

# 第二种方式
sed  '1d;s/lisi/zhangsan/g' sed.txt

运行效果

在这里插入图片描述

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

8.1 模式空间与暂存空间介绍

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

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

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

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

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

8.2 关于缓存区sed程度命令

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

8.3 示例: 缓存空间数据交换

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

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

sed '1h;$G' sed.txt

  • 1h 从模式空间中将第一行数据复制到暂存空间(覆盖方式)
  • $G 将暂存空间中的内容复制到模式空间中最后一行(追加方式)
    运行效果

在这里插入图片描述

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

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

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

运行效果

在这里插入图片描述

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

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

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

运行命令

在这里插入图片描述

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

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

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

运行效果

在这里插入图片描述

8.3.5 示例: 给每一行添加空行

插入空行

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

运行效果
在这里插入图片描述

8.3.6 示例: 删除所有的空行

命令

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

运行效果

在这里插入图片描述

三、 Shell好用的工具:awk

1. 介绍

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 ./

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

命令

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

运行效果

在这里插入图片描述

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

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

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

运行效果

在这里插入图片描述

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

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

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

运行效果

在这里插入图片描述

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

统计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 位是整数;

运行效果

在这里插入图片描述

6.示例: 打印第二行信息

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

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

运行效果

在这里插入图片描述

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

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

	ls -a | awk '/^c/'

运行效果

在这里插入图片描述

8. 示例: 打印第一列

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

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

运行效果

在这里插入图片描述

9. 示例: 打印最后1列

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

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

运行效果

在这里插入图片描述

10. 示例: 打印倒数第二列

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

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

运行效果

在这里插入图片描述

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

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

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

运行效果

在这里插入图片描述

12. 示例: 多分隔符使用

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

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

运行效果

在这里插入图片描述

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

给数据添加开始与结束

echo -e  "abc\nabc" | awk 'BEGIN{print "开始..."} {print $0} END{print "结束..."}'

# BEGIN 在所有数据读取行之前执行;END 在所有数据执行之后执行。

运行效果

在这里插入图片描述

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

“abc zhangsan lisi 32” 使用空格分割后, 通过循环拼接在一起

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

运行效果

在这里插入图片描述

15. 示例: 操作指定数字运算

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

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

运行效果

在这里插入图片描述

16. 示例: 切割ip

切割IP

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

运行效果
在这里插入图片描述

18. 示例: 显示空行行号

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

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

运行效果

在这里插入图片描述

19. 小结

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

grep:用于查找匹配的行

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

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

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

四、Shell好用的工具:sort

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

语法

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

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

数据准备

sort.txt文本文件代码

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

1. 示例1: 数字升序

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

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

运行效果
在这里插入图片描述

2. 示例2: 数字升序去重

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

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

运行效果

在这里插入图片描述

注意: 先排序再去重

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

命令

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

运行效果

在这里插入图片描述

4. 示例4: 数字降序去重

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

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

运行效果

在这里插入图片描述

5. 示例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

运行效果

在这里插入图片描述

6. 小结

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

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

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

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

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

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

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

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

在这里插入图片描述在这里插入图片描述

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

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

相关文章

国考省考结构化面试:整体介绍,考试题型,考试流程,仪表着装,如何备考?

国考省考结构化面试&#xff1a;整体介绍&#xff0c;考试题型&#xff0c;考试流程&#xff0c;仪表着装&#xff0c;如何备考&#xff1f; 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能&#xff0c;附带行测和申论&#xff0c;而常规国考省考最重…

基于ChatGPT的文档知识库客服系统-支持上传网址/文本/docx等数据

现在&#xff0c;很多公司都有自己的内容知识库&#xff0c;会产生大量的碎片话的内部知识&#xff0c;但是这样内部知识难以整合搜索。 我开发的文档知识库客服系统 gofly.v1kf.com &#xff0c;可以应用于企业内部知识库管理&#xff0c;用户可以使用自然语言提问&#xff0c…

杂谈:铜钱儿

我个人是比较喜欢铜钱儿的。 收藏其实谈不上&#xff0c;因为我不买什么名品&#xff0c;都是玩儿一些屌丝钱&#xff0c;穷嘛&#xff0c;这个也没啥好掩饰的~ 瞎聊点儿钱币的话题吧。 小时候是家里偶尔能发现铜钱儿&#xff0c;一般都是清朝的&#xff0c;乾隆居多。有时候地…

【苹果IM群发家庭推日历推群发】筛选“兼容性”,默认为高效,挑选“兼容性”视频和图象不操纵HEVC的新格式,承袭使用旧的MPEG格式

推荐内容IMESSGAE相关 作者✈️IMEAE推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者✈️IMEAE推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者✈️IMEAE推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者✈️IMEAE推荐内容3.日历推 *** …

Vue学习笔记(0504)

此页面对应着创建的Vue项目的显示页面 默认可以从下面的地址进行访问&#xff1a;http://localhost:8080 这里由于创建项目时我们选择了语法规范&#xff0c;所以我们在保存时哪些不符合代码规范的地方就会报错&#xff0c;只有修正代码规范后错误才会消失。 这里可以看出我们…

PyQt5桌面应用开发(7):文本编辑+语法高亮与行号

本文目录 PyQt5桌面应用系列代码编辑和语法高亮的亿点点细节作为用户报表的文本控件作为编辑器的文本控件代码编辑器的需求 代码编辑[^1]语法高亮[^2]小结 PyQt5桌面应用系列 PyQt5桌面应用开发&#xff08;1&#xff09;&#xff1a;需求分析 PyQt5桌面应用开发&#xff08;2&…

三、Spring Cloud Alibaba组件nacos

一、什么是Nacos 官方地址&#xff1a; https://nacos.io/zh-cn/docs/v2/what-is-nacos.html 概念&#xff1a; 服务&#xff08;Service&#xff09;是 Nacos 世界的一等公民。Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理。即集注册中心配置中心服务管理的一个平…

【苹果推IM,苹果iMessage相册推】当Apple APNS推送服务器从您的应用程序接吸取注册消息时,它将为您回到一串devicetoken(很是重要)

推荐内容IMESSGAE相关 作者✈️IMEAE推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者✈️IMEAE推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者✈️IMEAE推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者✈️IMEAE推荐内容3.日历推 *** …

养鱼-新手快乐缸阶段的一点总结

这是学习笔记的第 2456篇文章 养鱼这件事情上&#xff0c;除了满足了孩子的希望&#xff0c;也算是满足了自己的一点爱好。 从3月份开始的鱼缸进化到现在&#xff0c;对于养鱼这件事情的态度已经发生了很大的变化&#xff0c;我也趁此机会总结和梳理一下&#xff0c;先来定性我…

第三章:JavaScript 脚本语言(二)

最近发生了好多事情。 一、String对象 String对象是动态对象&#xff0c;需要创建实例后才可以引用其方法与属性。在js中也可以直接使用单引号或者双引号来直接创建实例化的对象。 anchor(name) 为字符串对象内容两边加上html<a name name></a>标记对bi…

【网络】网络基础入门

文章目录 局域网和广域网协议协议概念协议分层数据传输条件 OSI七层模型&#xff08;了解&#xff09;TCP/IP五层&#xff08;四层&#xff09;模型网络传输基本流程报头局域网通信原理以太网(了解)网络传输流程图数据包封装和分用 六、IP与MAC地址 局域网和广域网 独立模式: …

springboot+vue垃圾分类网站(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的垃圾分类网站。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风歌&a…

苹果备忘录误删了怎么恢复?恢复备忘录的3个方法!

案例&#xff1a;苹果删除的备忘录怎么恢复&#xff1f; 【友友们&#xff0c;苹果备忘录删除的备忘录在哪里可以恢复&#xff1f;有什么方法吗&#xff1f;】 苹果备忘录是日常生活中经常使用的一种记录方式&#xff0c;它可以帮助我们记录生活琐事、工作事项以及其他需要记录…

自动驾驶行业观察之2023上海车展-----车企发展趋势(3)

合资\外资发展 宝马&#xff1a;i7、iX1新车亮相&#xff0c;未来将持续发力电动化、数字化&#xff08;座舱&#xff09; 宝马在本次车展重点展示了电动化产品&#xff0c;新发车型为i7 M70L、iX1、及i vision Dee概念车等车型。 • 展示重点&#xff1a;电动化数字化&…

C/C++每日一练(20230505) 扩展兔子数列、删除重复项、寻找最小值

目录 1. 求尾数与常数之和 &#x1f31f; 2. 删除有序数组中的重复项 &#x1f31f; 3. 寻找旋转排序数组中的最小值 &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日…

Selenium原理以及Python从零实现

Selenium简介 Selenium是一个用于Web应用程序自动化测试工具。Selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。支持的浏览器包括IE&#xff08;7, 8, 9, 10, 11&#xff09;&#xff0c;Mozilla Firefox&#xff0c;Safari&#xff0c;Google Chrome&a…

使用zabbix监控Windows指定服务| zabbix Windows service filter

环境&#xff1a;Centos Zabbix6 问题&#xff1a;使用自带的windows服务监控带出了所有的服务&#xff0c;只想监控特定的服务 解决办法&#xff1a;使用正则表达式过滤 背景&#xff1a;在Zabbix6中&#xff0c;使用自带的windows服务监控带出了所有的服务&#xff0c;只想监…

数据分析如何入门?这4类 Excel 函数助你从小白到大神

Excel是我们从事数据分析的朋友们&#xff0c;会经常用到的最基本的工具。而Excel函数又是Excel中最为重要的、最为常用的知识点&#xff0c;我们必须要掌握。 基于此&#xff0c;今天就分类为大家讲述最为常用的Excel函数。 逻辑函数 1、and 2、or 3、if 当使用了if(…

Leetcode326. 3 的幂

Every day a leetcode 题目来源&#xff1a;326. 3 的幂 相似题目&#xff1a;342. 4的幂 解法1&#xff1a;递归 代码&#xff1a; /** lc appleetcode.cn id326 langcpp** [326] 3 的幂*/// lc codestart class Solution { public:bool isPowerOfThree(int n){if (n <…

【软考高项笔记】第1章 信息化发展1.4 数字中国

1.4 数字中国 我国信息化发展的主旋律 迎接数据时代&#xff0c;激活数据要素的潜能&#xff0c;推进网络强国建设&#xff0c;加快建设数据经济、数据社会、数据政府、以数字化转型整体驱动生产方式&#xff0c;生活方式和治理方式变革1.4.1 数字经济 新技术经济范式&#xf…