Linux排序-u不起作用

时间:2017-09-29 02:50:55

标签: sorting

我尝试对超过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是获取独特的物种数据

任何建议都将不胜感激。

3 个答案:

答案 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 6330SILa 12858H 6330SILa 13537H 6330SI},它们都是不同的。

要解决此问题,您需要将位置4 定义到位置4

... | sort -k 4,4 -u