【shell】Linux删除文本重复行

【shell】Linux删除文本重复行,第1张

通常如果我们想获取一个文件里不重复的行的时候,我们可以直接通过 sort -u 命令,先把文件排序,然后去掉连续的重复行就行。

可是,如果我们去掉重复行之后,还想保留文件原有的顺序,该怎么办呢?

虽然 Linux 下有个看上去似乎很有用的命令叫uniq,但事实上 uniq 命令仅仅只对连续的重复行有效。

如果不排序,直接使用 uniq 命令是没有用的;使用 sort -u 的话,我们就丢失了文件原有的行的顺序了。

一个终极的解决方案是使用 awk:

简要解释一下:awk 的基本执行流程是,对文件的每一行,做一个指定的逻辑判断,如果逻辑判断成立,则执行指定的命令;如果逻辑判断不成立,则直接跳过这一行。

我们这里写的 awk 命令是!x[$0]++,意思是,首先创建一个 map 叫x,然后用当前行的全文$0作为 map 的 key,到 map 中查找相应的 value,如果没找到,则整个表达式的值为真,可以执行之后的语句;如果找到了,则表达式的值为假,跳过这一行。

由于表达式之后有++,因此如果某个 key 找不到对应的 value,该++ *** 作会先把对应的 value 设成 0,然后再自增成 1,这样下次再遇到重复的行的时候,对应的 key 就能找到一个非 0 的 value 了。

我们前面说过,awk 的流程是先判断表达式,表达式为真的时候就执行语句,可是我们前面写的这个 awk 命令里只有表达式,没有语句,那我们执行什么呢?原来,当语句被省略的时候,awk 就执行默认的语句,即打印整个完整的当前行。就这样,我们通过这个非常简短的 awk 命令实现了去除重复行并保留原有文件顺序的功能。

删除重复行或去除重复记录,可以使用网络上的工具达成。 1. 打开网站!在内容输入框填写或贴上姓名﹑mail地址 2. 按下方的"删除重复行"按钮即可完成 其他附加功能勾选 "重复行比对",这样可以比对重复的内容了。 网站工具︰ifreesite/delete-duplicate-line-record

参考: IfreeSite

If you just want to delete the duplicate data and sort out the list without duplicate. you can easily use the excel function is okay. Highlight the column that you need to sort Under the data ->Remove Duplicates Then a table pop out press OK Then it will show how many duplicate data is delete and how many data is unique and remain. press OK

windows下安装 UnxUtils -- 仿 unix/linux 命令 sort.exe -u -m <input.txt >output.txt 注: -u 表示 "唯一" 或 "相同者取其一" 如何利用 仿unix命令 sed 一次替换文字中的 "某些相似性的字串"


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8896560.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-22
下一篇 2023-04-22

发表评论

登录后才能评论

评论列表(0条)

保存