hell脚本之管道命令(sort、uniq、tr、cut、split、eval)

162 阅读3分钟

sort命令

以行位单位对文件内容进行排序,也可以根据不同的数据类型来排序

语法格式

sort [选项] 参数
cat file |  sort 选项

常用选项

常用选项作用
-n按照数字进行排序(默认升序)
-r反向排序(倒序)
-u等同于uniq,表示相同的数据仅显示一行
-t指定字段分隔符,默认使用Tab键分隔
-k指定排序字段(不指定则默认第一个字段)
-f忽略大小写,会将小写字母都转换为大写字母来进行比较
-b忽略每行前面的空格
-o <输出文件>将排序后的结果转存到指定文件中

实列操作

对数字进行排序,按照第一列数字顺序进行排序

Snipaste_2022-09-05_14-08-02.png

对字母进行排序:默认是按照首字母进行排序,且小写字母放前面,大写字母放后面
Snipaste_2022-09-05_14-12-14.png
-r,倒序 默认是升序排列,加-r后是降序排列。
Snipaste_2022-09-05_14-15-37.png
-u,合并重复行,相同数据只显示一行

Snipaste_2022-09-05_14-20-24.png

-t,指定分隔符 -k,指定对第几个字段进行排序

Snipaste_2022-09-05_14-26-00.png

-o <输出文件>,将排序后的结果转存到指定文件中

Snipaste_2022-09-05_14-28-27.png

uniq命令

用于报告或者忽略文件中连续的重复行,常与sort命令结合使用

语法结构

uniq [选项] 参数
cat file | uniq 选项

常用选项:

常用选项作用
-c统计连续重复的行的次数,并且合并重复的行
-u仅显示出现一次的行(包括不连续的重复行)
-d仅显示重复出现的行(必须是连续的重复行)

示例

uniq不加选项,只会对连续的重复行进行去重

Snipaste_2022-09-05_14-32-42.png

uniq -c,显示连续重复行出现的次数,并合并重复行

Snipaste_2022-09-05_14-34-32.png

uniq -c,与sort命令结合,统计相同行重复出现的次数,包括不连续的重复行

Snipaste_2022-09-05_14-37-03.png

uniq -u,显示仅出现过一次的行(但包括不连续的重复行)

Snipaste_2022-09-05_14-39-13.png

uniq -d,仅显示重复出现的行(必须是连续的重复行)

Snipaste_2022-09-05_14-39-40.png

tr命令

常用来对来自标准输入的字符进行替换、压缩和删除

语法格式

tr [选项] 参数1 参数2

常用选项

常用选项作用
-c保留字符集1的字符,其他字符包括换行符\n用字符集2替换
-d删除所有属于字符集1的字符
-s将重复出现的字符串压缩为一个字符;用字符集2 替换字符集1
-t字符集2 替换 字符集1 不加选项效果相同

示例

替换字符

Snipaste_2022-09-05_16-30-27.png

tr -c 保留字符集1的字符,其他字符包括换行符\n用字符集2替换

Snipaste_2022-09-05_16-34-34.png

tr -d 删除所有属于字符集1的字符

Snipaste_2022-09-05_16-42-46.png

tr -s 将重复出现的字符串压缩为一个字符;用字符集2 替换字符集1

Snipaste_2022-09-05_16-45-42.png

过滤文件中的非空格

cat 3.txt | tr -s "\n"    ##将连续的换行符压缩成一个
cat 3.txt | grep -v "^$"  ##过滤出非空行

Snipaste_2022-09-05_16-49-40.png

分行输出环境变量PATH中所有的目录

Snipaste_2022-09-05_16-52-02.png

使用tr对数组进行排序

Snipaste_2022-09-05_17-02-33.png

解决从Windows传来文件的空格问题

方法一:

[root@weq ~]# cat -v tr.txt
111^M
^M
^M
^M
222[root@weq ~]# cat tr.txt | tr -s "\r" "\n" > newtr1.txt
[root@weq ~]# cat -v newtr1.txt
111
222

方法二:

yum install -y dos2unix
dos2unix +文件名,进行直接转换格式

cut命令——截取字段或者字符段

显示行中的指定部分,删除文件中指定字段

命令格式

cut [选项] 参数
cat file | cut 选项 参数

常用选项:

选项作用
-d指定分隔符(默认分隔符为Tab)
-f n按字段进行截取。指定第n个字段;1-3表示从第1个字段到第3个字段;1,4,7表示第1、第4、第7个字段
-b以字节为单位进行截取
-c以字符为单位进行截取
--complement排除所指定的字段
--output-delimiter更改输出内容的分隔符

示例

-d 指定分隔符,-f 按字段进行截取

Snipaste_2022-09-05_17-31-29.png

-f,连续的字段使用"-"连接,不连续的字段之间使用逗号

Snipaste_2022-09-05_17-33-43.png

–complement,排除所指定的字段

Snipaste_2022-09-05_17-36-28.png

–output-delimiter,更改输出内容的分隔符

Snipaste_2022-09-05_17-38-23.png

三种截取命令

echo ${变量名:下表位置:长度}       下标从0开始
echo XXXXXX | cut -b M=N         M代表下标起始位置,N代表下标终止位置,下标从1开始
expr substr XXXXX  下标位置 长度   下标从1开始

split命令——拆分文件

linux下将一个大的文件拆分成若干小文件

命令格式

split 选项 参数 原始文件 拆分文件名的前缀

常见选项

选项作用
-l以行数拆分
-b以大小拆分

Snipaste_2022-09-05_17-41-34.png

paste命令

用于合并文件的列

命令格式

paste [-s] [-d <间隔字符>] 文件

常用选项

-d<间隔字符>  指定合并后两列之间的分隔符

-s    将列的内容转为行内容进行合并
Snipaste_2022-09-05_17-44-58.png

eval命令——扫描命令2次

命令字前加上eval,shell会在执行命令之前扫描它两次,eval命令首先会先扫描命令行进行所有的置换,然后再执行命令,该命令适用于那些一次扫描无法实现功能的变量,该命令会对变量进行两次扫描

Snipaste_2022-09-05_17-47-48.png