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.02243994752564048
過0.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