shell编程系列(6)-使用Sort进行数据排序

文章目录

  • 前言
  • 使用Sort命令文本排序
    • sort命令的选项如下:
    • 基本排序
    • 对单个指定列进行排序
    • 对多个指定列进行排序
    • 删除重复的行
  • 结语

前言

shell脚本通常用作一些自动化的操作,但是在有些场景下例如科研运算,有时候会产生大量的运算结果文件,我们就需要对这些结果文件进行分析和统计,下面就一起看看如何使用shell对数据进行排序和统计

使用Sort命令文本排序

在linux系统中涉及到排序的问题都是使用sort命令进行排序,sort的基本语法如下:

# option 是可选的,默认对第一列按字典顺序排序
sort  [option] [file]

sort命令的选项如下:

选项说明
-b忽略前导空格或者制表符,找出第一个非空格字符。
-c测试文件是否已经排序。
-d根据字典顺序排序。该选项仅比较数字、字母和空格等字符。
-f忽略大小写。将小写字母转成大写字母后参与比较。
-i仅仅比较可打印字符。
-n根据算术值进行比较,参与比较的字符有空格、十进制数字,以及减号等。如果对非数值字符进行算术值比较,将会产生无法预知的结果。
-R根据哈希值随机排序。
-r颠倒排序结果。
-k定义排序关键字。
-m仅仅合并已经排好序的文件,不执行排序操作。
-o将排序结果写入文件,而不是标准输出设备。
-t指定字段分隔符。默认值为空格。
-u删除重复的行,只保留第一个。

现在我们使用这个demo.txt文件,进行各种排序的演示,demo.txt 是一份成绩单,内容如下:

cat demo.txt
# 第一列姓名		第二列分数		第三列级别
zhangsan        85              A       
lisi            96              A          
wangwu          65              B         
tom             58              C         
jerry           100             A 

基本排序

使用sort命令,不加任何参数,进行基本排序,基本排序的规则是对第一列进行字典顺序升序,代码如下:

sort demo.txt

结果如下:可以看到是针对第一列姓名进行排序
在这里插入图片描述

对单个指定列进行排序

在有些情况下,我们是对某一列进行排序,例如对于成绩单,我们想按照分数从高到底排序,命令如下:

# sort默认是按照字段顺序也就是字符串的顺序排列
# -n 申明排序的列是数值型的,按数字大小排序
# -r 默认是升序,我们需要降序从高到低
# -k 指定按第二列进行排序
sort -nr -k 2 demo.txt

在这里插入图片描述

对多个指定列进行排序

有时候我们需要对多个列进行排序,例如成绩单中,我们想先对级别进行排序,然后在按照分数排序,注意,这里首先是按照第三列按字典升序排序,然后对第二列按照数值降序排序,示例如下:

# 对多列进行排序可以使用多个 -k 
# -k 对第三列进行字典升序排序(默认就是字典升序排序)
# -k 对第二列进行数值降序(n 代表按数值排序,r代表降序)
 sort -k 3,3 -k 2,2nr demo.txt 

在这里插入图片描述

删除重复的行

有时我们的文件内存在大量重复的数据,利用sort命令我们可以很方便的去重,示例如下:
我们有demo2.txt文件,内容如下:
在这里插入图片描述
对demo2.txt文件进行排序,如下:
在这里插入图片描述
可以看到有两行是重复的,下面进行去重:

# -u 代表对文件进行去重
sort -u demo2.txt

结果如下:
在这里插入图片描述
可以看到结果里以及没有重复的行了。

结语

关于sort排序的内容就先介绍这么多,后面的文章会介绍其他的文本处理工具 ,如果我们在工作和学习中能用好这些工具,将会大大的提高我们的效率。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

单片机AVR单片机病房控制系统设计+源程序

一、系统方案 设计一个可容8张床位的病房呼叫系统。要求每个床位都有一个按钮,当患者需要呼叫护士时,按下按钮,此时护士值班室内的呼叫系统板上显示该患者的床位号,并蜂鸣器报警。当护士按下“响应”键时,结束当前呼叫…

【idea】设置鼠标滚轮控制缩放大小

1、点击file 选择Setting 2、点击Editor 下面的 General 3、勾选 Mouse Control 下面的 Change font size with CtrlMouse Wheel in 4、点级apply 5、按 ctrl键 鼠标滚轮缩放字体的大小

python进阶技巧

1.闭包 通过函数嵌套,可以让内部函数依赖外部变量,可以避免全局变量的污染问题 闭包注意事项: 总结: 2.装饰器 2.1装饰器的一般写法 2.2 装饰器的语法糖写法 def outer(func):def inner():print(睡了)func()print(起床)retur…

java--多态

1.什么是多态 多态是在继承/实现的情况下的一种现象,表现为:对象多态、行为多态。 2.多态的具体代码体现 编译看左边,运行看右边 3.多态的前提 有继承/实现关系;存在父类引用子类对象;存在方法重写 4.多态的一个注…

Navicat连接Oracle数据库记录

oracle服务如图: navicat连接设置: 测试连接成功! 连接创建成功!

语音信号处理:librosa

1 librosa介绍 Librosa是一个用于音频和音乐分析的Python库,专为音乐信息检索(Music Information Retrieval,MIR)社区设计。自从2015年首次发布以来,Librosa已成为音频分析和处理领域中最受欢迎的工具之一。它提供了一…

python中的函数定义

默认参数 注: 在Python中,print(x, and y both correct)是一条打印语句(print statement),用于将一条消息输出到控制台或终端。它的作用是将变量x的值和字符串and y both correct同时输出到屏幕上。 在这个语句中&…

基于AT89C51单片机的节日彩灯门设计

1.设计任务 本设计采用单片机为主控芯片,结合外围电路组成彩灯门的控制系统器,用来控制16个彩色的LED发光,实现彩色亮点的循环移动;通过软件编程实现各种各样的彩色亮点平面循环移动,该彩色控制器可以通过输…

LRU缓存淘汰策略的实现——LinkedHashMap哈希链表

LRU(最近最少使用)缓存淘汰策略可以通过使用哈希链表实现。LinkedHashMap 是 Java 中提供的一种数据结构,它综合了哈希表和双向链表的特点,非常适合用来实现 LRU 缓存。 LinkedHashMap 内部维护了一个哈希表和一个双向链表。哈希…

树与二叉树堆:经典OJ题集

目录 查找值为x的结点: 思路分析: 单值二叉树: 示例: 思路分析: 相同的树: 示例: 思路分析: 二叉树的前序遍历:——使用前序遍历把结点元素放入数组中 题…

Gartner发布降低软件供应链安全风险指南

软件供应链攻击已呈三位数增长,但很少有组织采取措施评估这些复杂攻击的风险。这项研究提供了安全和风险管理领导者可以用来检测和预防攻击并保护其组织的三种实践。 主要发现 尽管软件供应链攻击急剧增加,但安全评估并未作为供应商风险管理或采购活动的…

030 - STM32学习笔记 - ADC(四) 独立模式多通道DMA采集

030 - STM32学习笔记 - ADC(四) 独立模式多通道DMA采集 中断模式和DMA模式进行单通道模拟量采集,这节继续学习独立模式多通道DMA采集,使用到的引脚有之前使用的PC3(电位器),PA4(光敏…

js事件流与事件委托/事件代理

1 事件流 事件流分为两步,一是捕获,二是冒泡 1.1 捕获概念 捕获就是从最高层一层一层往下找到最内部的节点 1.2 冒泡概念 捕获到最小节点后,一层一层往上返回,像是气泡从最底部往上冒一样,由于水深不同压强不同&…

如何在工作中好好利用CHAT?

问CHAT:智能微网和综合能源项目实施过程中存在的管理风险和应对措施 CHAT回复:在智能微网和综合能源项目实施过程中,可能存在的管理风险和应对措施主要有以下几个方面: 1. 技术风险:所使用的技术和设备可能还处在研发…

某60区块链安全之薅羊毛攻击实战一学习记录

区块链安全 文章目录 区块链安全薅羊毛攻击实战一实验目的实验环境实验工具实验原理实验内容薅羊毛攻击实战一 实验步骤EXP利用 薅羊毛攻击实战一 实验目的 学会使用python3的web3模块 学会分析以太坊智能合约薅羊毛攻击漏洞 找到合约漏洞进行分析并形成利用 实验环境 Ubun…

[架构之路-255]:目标系统 - 设计方法 - 软件工程 - 软件设计 - 架构设计 - 软件架构风格

前言: 风格是指在不同领域内,人们在表达自己的过程中(如艺术、音乐、文化、时尚、建筑、软件系统等),所选择的、相对稳定的表达方式和特征的总和。在不同领域内都存在着多种不同的风格。 在艺术领域内,也…

vue项目下npm或yarn下安装echarts多个版本

最近在大屏展示的时候,用到了百度的echarts图表库,看完效果图后,又浏览了一下echarts官网案例,大同小异。但是搬砖过程中发现实际效果和demo相差甚远,一番折腾发现,项目中安装的是echarts4.x版本&#xff0…

nginx部署多个vue或react项目

下载nginx(tar.gz) nginx: download(官方地址) 部署nginx # 进入nginx压缩包所在目录 cd /usr/nginx# 解压 tar -zxvf nginx-1.25.3.tar.gz# 安装nginx的相关依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel# 生成Makefile可编译文件 cd /usr/ng…

7、Qt延时的使用

一、说明 平时用到两种延时方式QThread::sleep()和QTimer::singleShot() 1、QThread::sleep() QThread类中如下三个静态函数: QThread::sleep(n); //延迟n秒 QThread::msleep(n); //延迟n毫秒 QThread::usleep(n); //延迟n微妙 这种方式使用简单,但是会阻…

跨链原子交换

原子交换的想法于 2013 年首次在 BitcoinTalk 论坛上提出,它可以实现两个区块链之间的代币交换。 这些交换是原子的,因为双方要么收到对方的硬币,要么都保留自己的硬币。 一方不可能欺骗另一方。 它不依赖任何可信赖的第三方,消除…