次の項目を含むファイルがあります。
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
ただし、どの区切り文字を使用するかを知ることができるので、ソートにはこれは必要ありません。