提前感谢任何建议。
我尝试按制表符分隔的字段对文件进行排序(如下所示)。重要的字段是字段1和2。
ID(按字符串值排序),然后是较大字符串中的起始位置(按数字排序)。
KI270036.1 5137 5523 -1
KI270036.1 5215 5636 -1
**KI270036.1 546 1448 -1**
KI270036.1 6364 7425 -1
KI270036.1 8687 9529 -1
KI270041.1 1957 2343 1
KI270041.1 3114 3423 1
KI270041.1 4792 5439 1
KI270041.1 5703 6308 1
这是我试图排序的表格的一个例子。请注意,第一个字段按顺序排列,但根据我的规范,粗体字段出现故障。
我输入的命令是:
sort -g -t ' ' -k 1,2 my_file.txt
如何更改此项以实现按ID分组的记录,然后通过第二个字段以数字方式排序?
我在这个例子中寻找的输出是:
**KI270036.1 546 1448 -1**
KI270036.1 5137 5523 -1
KI270036.1 5215 5636 -1
KI270036.1 6364 7425 -1
KI270036.1 8687 9529 -1
KI270041.1 1957 2343 1
KI270041.1 3114 3423 1
KI270041.1 4792 5439 1
KI270041.1 5703 6308 1
答案 0 :(得分:2)
你可以定义多个键,因为第一个字段是固定大小的格式,不需要特殊标记(词法排序很好),第二个字段指定数字。
$ sort -k1,1 -k2n file
删除明星之后你会得到什么
KI270036.1 546 1448 -1
KI270036.1 5137 5523 -1
KI270036.1 5215 5636 -1
KI270036.1 6364 7425 -1
KI270036.1 8687 9529 -1
KI270041.1 1957 2343 1
KI270041.1 3114 3423 1
KI270041.1 4792 5439 1
KI270041.1 5703 6308 1
答案 1 :(得分:0)
两次通过sort
,第二次通过稳定排序:
$ sort my_file.txt | sort -g -s -k 2
**KI270036.1 546 1448 -1**
KI270041.1 1957 2343 1
KI270041.1 3114 3423 1
KI270041.1 4792 5439 1
KI270036.1 5137 5523 -1
KI270036.1 5215 5636 -1
KI270041.1 5703 6308 1
KI270036.1 6364 7425 -1
KI270036.1 8687 9529 -1
或者,
$ sort -g -s -k 2 my_file.txt | sort -s
**KI270036.1 546 1448 -1**
KI270036.1 5137 5523 -1
KI270036.1 5215 5636 -1
KI270036.1 6364 7425 -1
KI270036.1 8687 9529 -1
KI270041.1 1957 2343 1
KI270041.1 3114 3423 1
KI270041.1 4792 5439 1
KI270041.1 5703 6308 1
取决于主要排序键(您没有示例输出且模糊不清......)