无法使管道操作员正常运行 - linux

时间:2016-04-17 19:15:40

标签: linux sorting

我试图获取文件的第二列,获取前10个结果并按字母数字顺序排序,但它似乎无法正常工作。

cut -f2 file.txt | head -10 | sort -d

我得到了这个输出:

NM_000242
NM_000525
NM_001005850
NM_001136557
NM_001204426
NM_001204836
NM_001271762
NM_001287216
NM_006952
NM_007253

如果我先对文件进行排序并获取已排序文件的前10行

cut -f2 refGene.txt | sort -d | head -10

我得到了这个输出:

NM_000014
NM_000015
NM_000016
NM_000017
NM_000018
NM_000019
NM_000020
NM_000021
NM_000022
NM_000023

我不想对文件进行排序并获得排序结果,我想先获得前10行,然后按照字母数字顺序对它们进行排序。我在这里想念的是什么? 感谢

1 个答案:

答案 0 :(得分:1)

嗯,它正常工作NM_000525在NM_001005850之前,后者在NM_00695之前。

但如果您需要在数字上对第二部分(_之后)进行排序,那么您可以这样做:

cut -f2 file.txt | head -10 | sort -t_ -k1,1 | sort -s -t_ -k2 -n
  • -s是一种稳定的排序

假设整个文件中的格式相同(两个字母_个数字)

编辑:更短的版本将是:

cut -f2 file.txt | head -10 | sort -t_ -k1,1 -k2n

说明:

  • -t_使用_作为字段的分隔符(用于选择要排序的字段)
  • -k1,1从第一个字段开始按字母顺序排序(没有,1它也会排序第二个字段)
  • -k2n在第二个字段上按数字排序

首先它将按第一个字段排序(使用字母数字排序),然后使用第二个字段(使用数字,因此它会将字符串转换为数字并对其进行排序)