我试图获取文件的第二列,获取前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行,然后按照字母数字顺序对它们进行排序。我在这里想念的是什么? 感谢
答案 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
在第二个字段上按数字排序首先它将按第一个字段排序(使用字母数字排序),然后使用第二个字段(使用数字,因此它会将字符串转换为数字并对其进行排序)