首页 > 系统相关 >linux对文件内容去重,排序与不排序

linux对文件内容去重,排序与不排序

时间:2024-03-04 19:58:42浏览次数:32  
标签:文件 输出 -- skip value 重复 linux 排序

方法一,使用uniq相关命令进行去重

用法:uniq [选项]... [输入文件 [输出文件]]
从 <输入文件>(或标准输入)中过滤内容相同的相邻的行,
并写到 <输出文件>(或标准输出)。

不带选项时,内容相同的行将仅输出一次。

长选项的必选参数对于短选项也是必选的。
  -c, --count           在每行之前加上该行的重复次数作为前缀
  -d, --repeated        只输出重复的行,每组重复的行输出一次
  -D                    输出所有重复的行
      --all-repeated[=方法]    类似 -D,但支持在每组重复的行之间添加一行空行;
                                 方法={none(默认),prepend,separate}
  -f, --skip-fields=N   不要比较前 N 个字段
      --group[=方法]    分组输出所有项目,每组之间用空行分隔;
                          方法={separate(默认),prepend,append,both}
  -i, --ignore-case     比较时忽略大小写
  -s, --skip-chars=N    不要比较前 N 个字符
  -u, --unique          只输出不重复(内容唯一)的行
  -z, --zero-terminated     以 NUL 空字符而非换行符作为行分隔符
  -w, --check-chars=N   每行最多比较 N 个字符
      --help            显示此帮助信息并退出
      --version         显示版本信息并退出

字段指的是空白字符(通常是空格和/或制表符)的序列,后跟非空白字符的序列。
程序将先跳过字段 (--skip-fields),后跳过字符 (--skip-chars)。
需要注意的是:重复的行必须是相邻的,否则 "uniq" 将无法检测到它们,所以使用uniq进行去重时需要先进行排序。
另外,使用 sort -u也可以达到排序并去重的目的
方法二、使用awk加判断命令进行去重
awk '!x[$0]++' file #注意awk后跟的命令是单引号,而非双引号,否则会认为是字符串
上面的意思是
首先创建一个 map 叫 x,然后用当前行的全文 $0 作为 map 的 key,到 map 中查找相应的 value,如果没找到,则整个表达式的值为真,可以执行之后的语句;如果找到了,则表达式的值为假,跳过这一行。由于表达式之后有 ++,因此如果某个 key 找不到对应的 value,该 ++ 操作会先把对应的 value 设成 0,然后再自增成 1,这样下次再遇到重复的行的时候,对应的 key 就能找到一个非 0 的 value 了
简单来讲:
awk 的基本执行流程是,对文件的每一行,做一个指定的逻辑判断,如果逻辑判断成立,则执行指定的命令;如果逻辑判断不成立,则直接跳过这一行
参考原文Linux删除重复行 排序和不排序的做法_tcl语言 去重但是不排序-CSDN博客

标签:文件,输出,--,skip,value,重复,linux,排序
From: https://www.cnblogs.com/caicai2019/p/18052505

相关文章

  • .net core 6.0后台 Vue2前台 导出Excel文件
    要导出这样一个Excel表格:1.后端API下载安装包:EPPlus2.后端代码点击查看代码///<summary>///接口///</summary>///<returns>结果</returns>[HttpGet]publicIActionResultExportTab(){varli......
  • 快速排序的三种实现及简单优化(内附代码实现)
    概念​ 先贴一段百度:快速排序采用的是分治思想,即在一个无序的序列中选取一个任意的基准元素key,利用key将待排序的序列分成两部分,前面部分元素均小于或等于基准元素,后面部分均大于或等于基准元素,然后采用递归的方法分别对前后两部分重复上述操作,直到将无序序列排列成有序序列。步......
  • Tomcat 的组成结构和主配置文件Server.xml详解
    Tomcat的组成结构和主配置文件Server.xml详解参考:《TOMCAT与JAVAWEB开发技术详解第3版》https://www.jianshu.com/p/2789af11299fTomcat本身由一系列可配置的组件构成,其中核心组件是Servlet容器组件,它是所有其他Tomcat组件的顶层容器,用<CATALINA_HOME>表示Tomca......
  • Tomcat 的组成结构和主配置文件Server.xml详解
    Tomcat的组成结构和主配置文件Server.xml详解参考:《TOMCAT与JAVAWEB开发技术详解第3版》https://www.jianshu.com/p/2789af11299fTomcat本身由一系列可配置的组件构成,其中核心组件是Servlet容器组件,它是所有其他Tomcat组件的顶层容器,用<CATALINA_HOME>表示Tomca......
  • 浅谈C语言结构体中多文件的使用
    最近在学单片机C51,手中一个实验需要使用到结构体。但是多文件结构体搞了很久都没成功,在网上找资料文档也是眼花缭乱,对我这个菜鸡中的菜鸡很不友好。搞了1天总算完成了,把自己的亲身经历奉献给大家,供各位参考。有不对的地方也希望高手指出。首先新建3个文件main.c/a.h/a.ca.h写入......
  • linux内核同步机制
    内核同步机制在使用共享内存的程序代码中,为了保护共享资源,放置共享资源的并发访问导致的错误逻辑,需要用到内核同步机制。1.临界区是访问和操作共享数据的代码段。多个执行线程并发访问同一个资源(读/写),通常是不安全的,为了避免这种隐患,编程人员必须保证这种访问是原子的(不可打断)......
  • codeblocks两种创建文件的方式(含调试教程)
    codeblock用法以及调试教程codeblock两种创建文件的方式:1.直接建一个空白文件这种方式创建新文件的缺点是不能调试,debug是灰色的不能点第二种创建文件的方式:新建一个项目project创建一个空项目同样新建一个空白文件,只不过这种方法会提示你是否要把这个文件放在项目里先......
  • Java执行cpp文件
    关于JavaCPP:●JavaCPP使得Java应用可以在高效的访问本地C++方法,JavaCPP底层使用了JNI技术,可以广泛的用在JavaSE应用中(也包括安卓),以下两个特性是JavaCPP的关键,稍后咱们会用到:1.提供一些注解,将Java代码映射为C++代码2.提供一个jar,用java-jar命令可以将C++代码转为java应用可以......
  • pytnon -- 解决在excel使用pyxll-jupyter时读取excel文件出现”OSError: [Errno 22] I
     在jupyter中运行以下代码:importpandasaspddataset=pd.read_excel(r'‪D:\a.xlsx',sheet_name='Sheet1')print(dataset)出现报错信息:---------------------------------------------------------------------------OSError......
  • 使用SSH客户端登录Linux实例提示“ssh_exchange_identification: read: Connection re
    产品推荐:1、安全稳定的云服务器租用,2核/2G/5M仅37元,点击抢购>>>;2、高防物理服务器20核/16G/50M/200G防御仅350元,点击抢购>>>3、百度智能建站(五合一网站)仅880元/年,点击抢购>>> 模板建站(PC+手机站)仅480元/年,点击抢购>>>使用SSH客户端登录Linux实例提示“ssh_exchange_identifi......