我试着用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“物种。我怎么才能把复制件拿掉。
这是我的命令
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
是获取唯一的物种数据。
如有任何建议,将不胜感激。
发布于 2017-09-28 19:08:53
使用awk:
$ 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
输出了。
发布于 2017-10-01 12:40:08
根据sort
手册,-k
标志的工作方式如下:
-k,-key=pos1,POS2 在POS1 (原点1)启动密钥,在POS2 (默认行尾)结束
因此,-k 4
定义了一个从4
位置到行尾的键;所以在您的示例中,它的值是{ Fe 6330SI
、La 12858H 6330SI
、La 13537H 6330SI
},它们都是不同的。
要解决这个问题,您需要从4
位置定义一个键到4
位置
... | sort -k 4,4 -u
发布于 2017-09-29 16:52:25
我测试它。我使用下面的命令来过滤重复的一个。但我不明白为什么。
grep FRAME 17x200.o_neighbors.raw.dat | grep 9194 |sort -k 2 -n |sort -k 3,4 -u
任何解释都将不胜感激。
https://stackoverflow.com/questions/46481081
复制相似问题