Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在unix中,如何在不同字段上按字母和数字对文件进行排序?_Unix_Sorting - Fatal编程技术网

在unix中,如何在不同字段上按字母和数字对文件进行排序?

在unix中,如何在不同字段上按字母和数字对文件进行排序?,unix,sorting,Unix,Sorting,请不要认为这是“在unix中排序字母数字数据”问题的重复。。。我看了其他答案,觉得我的情况有点不同 我有这样的数据: A 192 D 112 D 188 C 091 A 281 B 919 …我想先按第一列(字母顺序)排序,然后按第二列(数字顺序)排序。我尝试使用: sort -n -k1,2 …但这给了我第一个字段的正确排序,但第二个字段的排序错误(100010021003,10,1…而不是1,10100010021003) 有人能建议如何按我喜欢的方式

请不要认为这是“在unix中排序字母数字数据”问题的重复。。。我看了其他答案,觉得我的情况有点不同

我有这样的数据:

A    192
D    112
D    188
C    091
A    281
B    919
…我想先按第一列(字母顺序)排序,然后按第二列(数字顺序)排序。我尝试使用:

sort -n -k1,2
…但这给了我第一个字段的正确排序,但第二个字段的排序错误(100010021003,10,1…而不是1,10100010021003)

有人能建议如何按我喜欢的方式对这两列进行排序吗?

尝试使用以下方法:-

sort -k1,1 -k4,4n
  • -n:使程序根据数值排序
  • -k选项:使用给定的列号对数据/字段进行排序。例如,选项-k2使程序使用第二个
    数据列。选项-k3,3n-k4,4n对每个列进行排序。首先
    它将对第3列和第4列进行排序
这应该起作用:

sort -t "," -k1,1 -k2n,2 file

sort-k4,4n-k1,1???我应该提到,两个列的字符串可以有1到50个字符,并且每行都不同
sort-k1-nk3文件
应该可以工作。感谢您的命令/回答!我尝试了这个,我看到了你要做的事情,但它对我的数据不起作用,因为每列中的值不是固定的字符长度。在我的示例中,我对column1使用字符长度1,对column2使用字符长度3,但实际上,字符长度在1到50之间,具体取决于行。有办法解决这个问题吗?我先反转命令,对第2列进行排序,然后对第1列进行排序:
sort-k1,1-k4,4n
,这似乎有效。你能解释一下这个命令是如何工作的吗?我不熟悉
-k4,4n
@jake9115:-更新了我的答案,解释了两者。希望有帮助:)附言,如果这真的对你有帮助的话,别忘了接受这个答案;)谢谢我现在明白了。令人费解的是,当数据中似乎只有两列时,答案排序在第4列。不过,基本答案(使用
-k
指定要对哪些列进行排序以及如何对它们进行排序)是有效的。