我尝试对超过10000个数据的大文件进行排序。我想在文件中找到独特的物种(如Fe,La等)(17x200.o_neighbors.raw.dat)理想情况下,我应该得到如下结果(见第4栏)
FRAME 0 9194 Fe 6330SI
FRAME 11 9194 La 12858H 6330SI
然而,我得到了这样的结果
FRAME 0 9194 Fe 6330SI
框架11 9194 La 12858H 6330SI
FRAME 19 9194 La 13537H 6330SI
有两个" 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
是获取独特的物种数据
任何建议都将不胜感激。
答案 0 :(得分:0)
使用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
输出。
答案 1 :(得分:0)
我测试了一下。我使用下面的命令来过滤重复的命令。但我不明白为什么。
grep FRAME 17x200.o_neighbors.raw.dat | grep 9194 |sort -k 2 -n |sort -k 3,4 -u
任何解释都将不胜感激。
答案 2 :(得分:0)
根据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