首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除不在相同行上的重复值

删除不在相同行上的重复值
EN

Unix & Linux用户
提问于 2019-07-24 22:54:53
回答 2查看 295关注 0票数 3

因此,我有一组包含文件名和相关编号的文本。目前的情况如下:

代码语言:javascript
复制
RR0.out -1752.142111    
RR1.out -1752.141887    
RR2.out -1752.142111    
RR3.out -1752.140319    
RR4.out -1752.140564    
RR5.out -1752.138532    
RR6.out -1752.138493    
RR7.out -1752.138493    
RR8.out -1752.138532

我想要编写一个脚本,它将删除具有重复秒值的行。因此,产出将是:

代码语言:javascript
复制
RR0.out -1752.142111    
RR1.out -1752.141887    
RR3.out -1752.140319    
RR4.out -1752.140564    
RR5.out -1752.138532    
RR6.out -1752.138493    
RR8.out -1752.138532    

我已经看到sort -uuniq都用于这一点,但我不知道如何删除不完全相同的行(这些行可以用uniq而不是sort完成),也不能删除彼此不相邻的行(这些行可以用sort完成,而不能用uniq完成)。有人能给我一些建议吗?

到目前为止,下面的代码还没有给我想要的。

代码语言:javascript
复制
sort -t ' ' -k 2n file > file2  
uniq -f 1 file2 > file3 
EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2019-07-24 22:57:25

代码语言:javascript
复制
$ sort -uk2 file
RR6.out -1752.138493
RR8.out -1752.138532
RR5.out -1752.138532
RR3.out -1752.140319
RR4.out -1752.140564
RR1.out -1752.141887
RR0.out -1752.142111

sort -u将对输出进行排序,只产生唯一的值,-k2将根据第二列进行排序/惟一化。

为了根据第一列中的文件名重新排序输出,可以将其转换回排序:

代码语言:javascript
复制
$ sort -uk2 file | sort -k1
RR0.out -1752.142111
RR1.out -1752.141887
RR3.out -1752.140319
RR4.out -1752.140564
RR5.out -1752.138532
RR6.out -1752.138493
RR8.out -1752.138532
票数 1
EN

Unix & Linux用户

发布于 2019-07-24 23:00:25

如果您不坚持使用sort/uniq,那么:

代码语言:javascript
复制
$ awk '!seen[$2]++' file
RR0.out -1752.142111    
RR1.out -1752.141887    
RR3.out -1752.140319    
RR4.out -1752.140564    
RR5.out -1752.138532    
RR6.out -1752.138493    

(这与预期的输出不同,因为RR5.out -1752.138532RR8.out -1752.138532仅通过尾随空格不同;awk将其视为分隔符的一部分,而不是第二个字段的一部分。)

票数 4
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/531989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档