例如,我有一些测试文件,想按列值对其进行排序。后
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 ,
,以+
作为列分隔符进行排序并删除后面的+
。