首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Linux排序-u不工作。

Linux排序-u不工作。
EN

Stack Overflow用户
提问于 2017-09-29 02:50:54
回答 3查看 158关注 0票数 0

我试着用10000多个数据对一个大文件进行排序。我想找到独特的物种(如Fe,La,等等)。在文件(17x200.o_neighbors.raw.dat)中,理想情况下,我应该得到如下结果(参见第4列)

帧0 9194 Fe 6330 Fe 帧11 9194 La 12858H 6330 11

但是,我得到了这样的结果

帧0 9194 Fe 6330 Fe 帧11 9194 La 12858H 6330 11 帧19 9194 La 13537H 6330 19

有两个"La“物种。我怎么才能把复制件拿掉。

这是我的命令

代码语言:javascript
运行
复制
grep FRAME 17x200.o_neighbors.raw.dat | grep 9194 |sort -k 2 -n |sort -k 4 -u

第一个sort -k 2 -n是获取时间序列顺序,第二个sort -k 4 -u是获取唯一的物种数据。

如有任何建议,将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-09-29 03:08:53

使用awk:

代码语言:javascript
运行
复制
$ awk '($4 in a==0) { # if $4 not hashed yet, ...
    a[$4]=$0          # hash it to a
}
END {                 # after all record have been processed
    for(i in a)       # iterate all hashed records
        print a[i]    # output
} ' file
FRAME 0 9194 Fe 6330SI
FRAME 11 9194 La 12858H 6330SI

现在您可以sort输出了。

票数 0
EN

Stack Overflow用户

发布于 2017-10-01 20:40:08

根据sort手册,-k标志的工作方式如下:

-k,-key=pos1,POS2 在POS1 (原点1)启动密钥,在POS2 (默认行尾)结束

因此,-k 4定义了一个从4位置到行尾的键;所以在您的示例中,它的值是{ Fe 6330SILa 12858H 6330SILa 13537H 6330SI },它们都是不同的。

要解决这个问题,您需要从4位置定义一个键到4位置

代码语言:javascript
运行
复制
... | sort -k 4,4 -u
票数 1
EN

Stack Overflow用户

发布于 2017-09-30 00:52:25

我测试它。我使用下面的命令来过滤重复的一个。但我不明白为什么。

代码语言:javascript
运行
复制
grep FRAME 17x200.o_neighbors.raw.dat | grep 9194 |sort -k 2 -n |sort -k 3,4 -u

任何解释都将不胜感激。

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

https://stackoverflow.com/questions/46481081

复制
相关文章

相似问题

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