按列值进行数字排序

按列值进行数字排序

例如,我有一些测试文件,想按列值对其进行排序。后

awk -F'[:,]' '{print $16}' test.json

我得到第 16 列的下一个输出:

 123
 457
 68
 11
 939
 11
 345
 9
 199
 13745

现在,当我想对它进行数字排序时,我使用

awk -F'[:,]' '{print $16}' test.json | sort -nk16

但我只是回来而不是数字排序......

 11
 11
 123
 13745
 199
 345
 457
 68
 9
 939

原因是什么,我认为-n参数足以进行数字排序......

答案1

的输出awk仅包含一列,因此没有第 16 列。

因此,sort看到所有相同的空排序键,您观察到的是最后一种排序(整行上的词法排序)的结果,您可以-s在某些实现中使用该选项禁用它。

在这里你想要:

awk -F'[:,]' '{print $16}' test.json | sort -n

现在,如果您想在第16 列对文件进行排序,请注意sort仅支持一个字符列分隔符,因此您需要预处理输入:

sed 's/[:,]/&+/g' test.json | sort -t+ -k16,16n | sed 's/\([:,]\)+/\1/g'

这里将 a 附加+到每个:or ,,以+作为列分隔符进行排序并删除后面的+

相关内容