GNU Sortコマンドが最初のN小数点のみを考慮するように強制します。

GNU Sortコマンドが最初のN小数点のみを考慮するように強制します。

example次のデータを含むテキストファイルを考えてみましょう。

0 0.2667328325084663 0.02243994752564071
0 1.86630577374265 0.02243994752564048
0 0.2401209140718633 0.02243994752564071

example次のコマンドを使用して、最初の3列を並べ替えてから2列目を並べ替えます。

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に示すように、最初の行のデータ値は2行目のデータ値よりも高くなります。これは、3番目の列の最初の行が2番目の列の10.02243994752564048番目の行より小さいため、予想される現象です0.02243994752564071

問題は、0.022439947525640480.02243994752564071小数点が15桁まで同じであるため、広範囲のアプリケーションで同じ値を持つと仮定できることです。

ここでは、15のように小数点のsort最初の桁のみを考慮するように指示する方法はありますか?N

答え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

に基づいてこの回答:

まず、次を使用して2番目と3番目の列を切り捨てます(たとえば、6桁の小数点まで)。 (現在は1列に2回適用され、時間の経過とともに回答を編集する予定です。)

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

関連情報