bash:对相同值进行排序会产生不同的顺序

时间:2016-10-19 16:30:03

标签: bash sorting

我有以下两个文件:

文件1:

4    rs10000007    C    A     0.006562      762
4    rs10000008    T    C      0.01575      762
4    rs10000009    G    A            0      762
12     rs1000000    A    G       0.2388      762
4    rs10000010    C    T       0.4921      762
4    rs10000003    A    G       0.2992      762
4    rs10000005    G    A       0.4409      762
4    rs10000012    G    C       0.1417      762
4    rs10000006    C    T      0.02625      762
4    rs10000011    T    C      0.03675      762

file2的:

sort -f -k 2 file1 > file1.sorted
sort -f -k 2 file2 > file2.sorted

我使用sort来根据第2列对这些文件进行排序,第2列包含两个文件的相同值。

12  rs1000000   0   126890980   A   G
4   rs10000003  0   57561647    A   G
4   rs10000005  0   85161558    G   A
4   rs10000006  0   108826383   C   T
4   rs10000007  0   114553253   C   A
4   rs10000008  0   172776204   T   C
4   rs10000009  0   71048953    G   A
4   rs10000010  0   21618674    C   T
2   rs1000001   0   50711642    T   G
4   rs10000011  0   138223055   T   C

但是,我得到两个不同的排序文件:

file1.sorted:

4    rs10000003    A    G       0.2992      762
4    rs10000005    G    A       0.4409      762
4    rs10000006    C    T      0.02625      762
4    rs10000007    C    A     0.006562      762
4    rs10000008    T    C      0.01575      762
4    rs10000009    G    A            0      762
12     rs1000000    A    G       0.2388      762
4    rs10000010    C    T       0.4921      762
4    rs10000011    T    C      0.03675      762
4    rs10000012    G    C       0.1417      762

file2.sorted:

    for (Object e : messages) {
    Object[] data = (Object[]) e;
    System.out.println(Array.getLength(e)+" ---------------- IS THE LENGTH");
    System.out.println(data[0]+" ---------------- IS THE FIRST ELEMENT");
    }

我在这里缺少什么?如何以相同的方式对这两个文件进行排序?这对我来说无关紧要,只要我可以使用join来加入这两个文件。非常感谢!

1 个答案:

答案 0 :(得分:2)

使用-k 2,2仅根据第二列进行排序。 -k 2表示从第2列开始排序

$ sort -f -k 2,2 file2
12     rs1000000    A    G       0.2388      762
4    rs10000003    A    G       0.2992      762
4    rs10000005    G    A       0.4409      762
4    rs10000006    C    T      0.02625      762
4    rs10000007    C    A     0.006562      762
4    rs10000008    T    C      0.01575      762
4    rs10000009    G    A            0      762
4    rs10000010    C    T       0.4921      762
4    rs10000011    T    C      0.03675      762
4    rs10000012    G    C       0.1417      762

使用-b选项忽略前导空白,例如:sort -bf -k 2,2 file2


进一步阅读:Sort based on the third column