【问题标题】:why this "sort" command not work?为什么这个“排序”命令不起作用?
【发布时间】:2016-10-09 05:48:55
【问题描述】:

我想对这个文件进行排序:

[ichen@ui02 ~]$ cat file
root_1down 20 root_EG 1195597
root_2down 19 root_EG 1340493
root_2down 1 root_EG 4136169

我想要的输出是数字顺序,所以这是我想要的结果:

root_1down 20 root_EG 1195597
root_2down 1 root_EG 4136169
root_2down 19 root_EG 1340493

那么,我怎样才能得到我想要的正确订单?

**Supply:**

根据@Cyrus:sort -t " " -k1,1 -k2,2n file的命令成功 但是,当我交换第一个单词和第二个单词的值时:

[ichen@ui05 ~]$ cat file
20 root_1down root_EG 1195597
19 root_2down root_EG 1340493
1 root_2down root_EG 4136169

这次我想得到相同的结果,我想先按第二个单词排序,然后按第一个,预期输出与上面相同。但是,输出不是我所期望的:

[ichen@ui05 ~]$ sort -t " "  -k2,1 -k1,2n file
1 root_2down root_EG 4136169
19 root_2down root_EG 1340493
20 root_1down root_EG 1195597

第二个词没有按我预期的方式排序。

【问题讨论】:

  • 您希望结果先按第一列中的嵌入数字排序,然后再按第二列中的数字排序?
  • @dawg 不是嵌入的数字,而是整个单词包含数字。事实上,有上千行,其中许多的第一个单词不同但嵌入的数字相同,所以我想按整个第一个单词排序
  • 您交换了文件中的列,但没有交换排序键(好吧,您交换了键但不正确!)。 sort -t " " -k2,2 -k1,1n file 应该会给出预期的输出。

标签: shell sorting awk sed


【解决方案1】:

使用 GNU 排序:

sort -t " " -k1,1 -k2,2n file

输出:

root_1down 20 root_EG 1195597 root_2down 1 root_EG 4136169 root_2down 19 root_EG 1340493

【讨论】:

  • 我编辑了问题,当我交换第一个单词和第二个单词时它不起作用,我使用命令sort -t " " -k2,1 -k1,2n file 详细信息已更新问题。你能看看吗?
  • 我建议回滚您的更改并开始一个新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-29
  • 1970-01-01
  • 1970-01-01
  • 2011-06-14
  • 1970-01-01
  • 2019-03-25
相关资源
最近更新 更多