排序字母数字多列

时间:2013-07-26 21:53:23

标签: shell unix sorting

我正在尝试按字段1(忽略ccc)对此文件进行排序,如果相等,则按字段2作为数字:

ccc1    4
cccY    1
cccY    5
cccX    2
cccX    10
ccc10   4
ccc1    10
ccc2    5

我正在运行排序为sort -t $'\t' -k 1.4,1n -k 2,2n“但是,我没有得到预期的输出:

cccY    1
cccX    2
cccY    5
cccX    10
ccc1    4
ccc1    10
ccc2    5
ccc10   4

为什么cccY和cccX混合在一起?它应该首先给出cccX,然后是cccY,对吧?

感谢,

FGV

PS - 如果你想重现它,只需运行:

echo -e "ccc1\t4\ncccY\t1\ncccY\t5\ncccX\t2\ncccX\t10\nccc10\t4\nccc1\t10\nccc2\t5" | sort -t $'\t' -k 1.4,1n -k 2,2n

1 个答案:

答案 0 :(得分:1)

我希望这是你需要的。

echo -e "ccc1\t4\ncccY\t1\ncccY\t5\ncccX\t2\ncccX\t10\nccc10\t4\nccc1\t10\nccc2\t5" | sort -t $'\t' -k 1.4,1 --version-sort -k 2n

我相信你的命令中的主要问题是在第一个键中使用数字排序,因为有数字与字符混合。