【问题标题】:can't make pipe operator function properly - linux无法使管道运算符正常运行 - linux
【发布时间】:2016-04-17 19:15:39
【问题描述】:

我正在尝试获取文件的第二列,获取前 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 行,然后按字母数字顺序对它们进行排序。我在这里错过了什么? 谢谢

【问题讨论】:

    标签: linux sorting


    【解决方案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 在第二个字段上按数字排序

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-12
      • 2020-08-03
      • 2015-11-27
      • 2015-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多