ファイルを並べ替えますが、行のペアを一緒に保ちます。

ファイルを並べ替えますが、行のペアを一緒に保ちます。

次の項目を含むファイルがあります。

female,9,13,6.3152956461
female,12,12,5.4797699786
female,11,11,3.6421699174
female,9,14,4.5933365997
female,8,14,2.4181574607

など。

まず、最初の2つの列を除くすべての列を削除し、カンマではなくスペースで区切ります。しかし、最終的に私の問題は、列1を基準にソートしてから列2を基準にソートする必要がありますが、指定された行のペアを同じに保つ必要があることです。

列の区切り文字を切り替えて並べ替えるにはsedを使用する必要があると思いますが、2つの並べ替えの間に行をペアにする方法がわかりません。

ベストアンサー1

これはあなたが言うのですか?

$ sort -t, -k1,1 -k2,2n file
female,8,14,2.4181574607
female,9,13,6.3152956461
female,9,14,4.5933365997
female,11,11,3.6421699174
female,12,12,5.4797699786

これにより、,最初のフィールドの区切りデータがアルファベット順に並べ替えられ、2番目のフィールドが数値順にソートされます。ソートでは、最初のフィールドが最初にソートに使用されます。最初のフィールドが同じレコードの場合、2番目のフィールドがソートに使用されます。


次に、最後のいくつかの列を削除するには(または列1と2を維持します):

$ sort -t, -k1,1 -k2,2n file | cut -d, -f1,2
female,8
female,9
female,9
female,11
female,12

また、対応するカンマを削除します。

$ sort -t, -k1,1 -k2,2n file | cut -d, -f1,2 | tr ',' ' '
female 8
female 9
female 9
female 11
female 12

sortただし、どの区切り文字を使用するかを知ることができるので、ソートにはこれは必要ありません。

おすすめ記事