强制 GNU Sort 命令仅考虑前 N 个小数点

强制 GNU Sort 命令仅考虑前 N 个小数点

example请考虑一个名为包含以下数据的文本文件:

0 0.2667328325084663 0.02243994752564071
0 1.86630577374265 0.02243994752564048
0 0.2401209140718633 0.02243994752564071

我们example通过以下命令首先对第三列进行排序,然后对第二列进行排序:

sort -g -k 3,3 -k 2,2 <example > sortedExample

新文件sortedExample现在包含以下内容:

0 1.86630577374265 0.02243994752564048
0 0.2401209140718633 0.02243994752564071
0 0.2667328325084663 0.02243994752564071

从第2列可以看出,其第一行的数据值高于第二行的数据值。这是预期的,因为第三列的第一行0.02243994752564048小于第二列的第一行0.02243994752564071

问题是0.022439947525640480.02243994752564071在十进制第 15 位以内都是相同的,因此我们可以假设它们在广泛的应用中具有相同的值。

有没有什么方法可以告诉sort我们只考虑第一个N小数点,例如此处的 15?

答案1

@steeldriver 给出了更有说服力的答案(假设我们使用GNU version of sort并希望考虑前 6 个小数点):

sort -g -k 3.1,3.6 -k 2.1,2.6 <example > sortedExample

导致:

0 0.2401209140718633 0.02243994752564071
0 0.2667328325084663 0.02243994752564071
0 1.86630577374265 0.02243994752564048

基于这个答案:

首先,我们用以下内容截断(例如到小数点后第六位)第二列和第三列(目前每列应用两次,我将随着时间的推移编辑我的答案):

sed 's|\([0-9]\.[0-9]\{6\}\)[0-9]\{1,\}|\1|' example > interim

然后,上述命令:

sort -g -k 3,3 -k 2,2 <interim2 > sortedExample

获得期望的结果为:

0 0.240120 0.022439
0 0.266732 0.022439
0 1.866305 0.022439

相关内容