经常有这样的需求:两个文本文件要求取重复的行或只取不重复的,简单的情况下用sort和uniq来处理是非常方便的:
利用现存两个文件,生成一个新的文件
1. 取出两个文件的并集(重复的行只保留一份)
2. 取出两个文件的交集(只留下同时存在于两个文件中的文件)
3. 删除交集,留下其他的行
1. cat file1 file2 | sort | uniq
2. cat file1 file2 | sort | uniq -d
3. cat file1 file2 | sort | uniq -u
当然如果需要计数也有一个很好的参数uniq -c 可以将相同行数的计数放在行首
不过如果要求复杂,这个方法就不好用了,之后我会和大家分享一个按列比较的脚本。
------
另外,顺便将这sort和uniq的详细帮助附到这里供参考(linux常见的命令其实有很强大,只是可能不留心而没有发现):
sort [选项] 文件
说明:sort命令对指定文件中所有的行进行排序,并将结果显示在标准输出上。如不指定输入文件或使用“- ”,则表示排序内容来自标准输入。
sort排序是根据从输入行抽取的一个或多个关键字进行比较来完成的。排序关键字定义了用来排序的最小的字符序列。缺省情况下以整行为关键字按ASCII字符顺序进行排序。
改变缺省设置的选项主要有:
- m 若给定文件已排好序,合并文件。
- c 检查给定文件是否已排好序,如果它们没有都排好序,则打印一个出错信息,并以状态值1退出。
- u 对排序后认为相同的行只留其中一行。
- o 输出文件 将排序输出写到输出文件中而不是标准输出,如果输出文件是输入文件之一,sort先将该文件的内容写入一个临时文件,然后再排序和写输出结果。
改变缺省排序规则的选项主要有:
- d 按字典顺序排序,比较时仅字母、数字、空格和制表符有意义。
- f 将小写字母与大写字母同等对待。
- I 忽略非打印字符。
- M 作为月份比较:“JAN”<“FEB”
- r 按逆序输出排序结果。
-k, --key=POS1[,POS2] posl - pos2 指定一个或几个字段作为排序关键字,字段位置从posl开始,到pos2为止(包括posl,不包括pos2)。如不指定pos2,则关键字为从posl到行尾。字段和字符的位置从0开始。
- b 在每行中寻找排序关键字时忽略前导的空白(空格和制表符)。
- t separator 指定字符separator作为字段分隔符。
uniq命令
文件经过处理后在它的输出文件中可能会出现重复的行。例如,使用cat命令将两个文件合并后,再使用sort命令进行排序,就可能出现重复行。这时可以使用uniq命令将这些重复行从输出文件中删除,只留下每条记录的唯一样本。
语法:
uniq [选项] 文件
说明:这个命令读取输入文件,并比较相邻的行。在正常情况下,第二个及以后更多个重复行将被删去,行比较是根据所用字符集的排序序列进行的。该命令加工后的结果写到输出文件中。输入文件和输出文件必须不同。如果输入文件用“- ”表示,则从标准输入读取。
该命令各选项含义如下:
- c 显示输出中,在每行行首加上本行在文件中出现的次数。它可取代- u和- d选项。
- d 只显示重复行。
- u 只显示文件中不重复的各行。
- n 前n个字段与每个字段前的空白一起被忽略。一个字段是一个非空格、非制表符的字符串,彼此由制表符和空格隔开(字段从0开始编号)。
+n 前n个字符被忽略,之前的字符被跳过(字符从0开始编号)。
- f n 与- n相同,这里n是字段数。
- s n 与+n相同,这里n是字符数。
------------------
更详细的说明来自linux的man
可参考的网址:
用 sort 和 tsort 对文件进行排序
http://www.ibm.com/developerworks/cn/linux/l-tip-prompt/l-tiptex4/
分享到:
相关推荐
我们应当注意的是,它和sort的区别,sort只要有重复行,它就去除,而uniq重复行必须要连续,也可以用它忽略文件中的重复行。 语法格式:uniq [参数] [文件] 常用参数: -c 打印每行在文本中重复出现的次数 -d ...
这里提到的"windows下的uniq"实际上可能是指一个名为UNIQUE.exe的程序,它用于处理数据,去除重复行,与Gawk(GNU Awk)配合工作,提供数据分析中的去重能力。 `uniq`命令在Unix/Linux中是一个非常常见的文本处理...
本篇文章将深入探讨如何使用Linux命令行工具来实现文件内容的去重以及求交集、并集和差集。 一、数据去重 在大数据处理中,重复数据是一个普遍存在的问题。Linux提供了`uniq`命令来去除文件中的重复行。首先,我们...
uniq 命令是 Linux 中的一个文本处理命令,用于去除文本中的重复行。该命令读取输入文件,并比较相邻的行。在正常情况下,第二个及以后更多个重复行将被删去,行比较是根据所用字符集的排序序列进行的。该命令加工后...
- 数据清洗:在处理CSV或其他数据文件时,可以使用`uniq`去除重复的数据记录。 - 日志分析:分析系统或应用程序日志时,去除重复的错误或事件记录。 - 文本分析:在进行文本挖掘或自然语言处理时,可能会用到`...
uniqtoosort | uniq -c版本sort | uniq -csort | uniq -c输出在解析每一行时实时更新。用法将一些基于行的东西输送到uniqtoo ,就像你在sort | uniq -csort | uniq -c 。这是一个计算此存储库中文件扩展名的示例,...
的一个版本sort | uniq -c sort | uniq -c与输出,在实时更新的各行被解析。 用法 基于线进入管的东西uniqtoo一样的,你会进入sort | uniq -c sort | uniq -c 。 这是一个示例,该示例计算此存储库中文件的扩展名...
数据集介绍 简述 来自Autoscout的汽车数据 内容 该数据集包含以下内容: 总记录数:30000 域名:autoscout24.de 日期范围:2020年2月1日至2020年2月29日 文件扩展名:csv 可用字段: -Uniq ID, -抓取时间...
`lsof`就是这样一个强大的工具,它能提供实时的文件使用情况,包括已删除但仍在使用的文件、网络连接等信息。 ### 文件类型简述 在介绍`lsof`之前,有必要了解Linux中的基本文件类型: 1. **普通文件**:包含文本...
在Linux环境中,面对数据处理和分析的任务,我们经常会利用各种命令行工具来高效地完成工作。本篇将详细解析如何巧妙地使用Linux命令完成统计排序的功能,以解决找到数量排名前10的记录的问题。 首先,我们需要理解...
使用`sort`和`uniq`命令处理文件A和B的交集、并集和差集。 12. **查找含有指定字符串的文件**: ```bash for file in $(ls $2); do bname=$(grep -l $1 $2/$file); basename $bname; done ``` 在指定的...
例如,如果你有一个包含用户信息的数据流,每个对象都有`id`、`email`和`username`等字段,`uniq-object-stream`可以确保数据流中不会有具有相同`id`、`email`和`username`组合的重复对象。这种深度比较的能力是通过...
uniq 命令是 Linux 中的一个文本处理命令,用于删除或显示文本文件中的重复行。它可以读取输入文件,并比较相邻的行。在正常情况下,第二个及以后更多个重复行将被删去,行比较是根据所用字符集的排序序列进行的。该...
我们可以使用`uniq`命令来过滤掉这些相邻的重复行,但要注意`uniq`只会忽略连续的重复行,所以我们需要先用`sort`对整个输出进行排序: ```bash find . -type f -exec md5sum {} \; | sort | uniq -D ``` `uniq -D...
### 数据文件处理命令小结 #### 一、转换和删除重复命令——`tr` `tr` 命令主要用于字符转换或删除重复字符。它在Linux运维中非常实用,能够帮助用户快速修改文本文件中的字符。 ##### 命令格式 ``` tr [option] ...
在Linux操作系统中,掌握一些基础的文字处理命令是十分重要的,这些命令可以帮助我们高效地操作文本文件,进行数据处理和分析。以下是对所提及的几个关键命令的详细解释: 1. **wc (Word Count)**: `wc`命令用于...
通过`Uniq.java`的实现,我们可以学习到如何设计和编写MapReduce作业,以及如何处理`datadel1.txt`和`datadel2.txt`这类可能含有重复数据的文件。这个案例涵盖了数据处理的关键步骤,包括数据分片、并行处理、中间...