最初と2番目の列に基づいてファイルを並べ替える

最初と2番目の列に基づいてファイルを並べ替える

2番目の列の最初の要素に基づいて並べ替えて、2列のタブで区切られたテキストファイルを操作する方法(最初の列要素が同じ場合のみ)?

例:

入力ファイル1

A   1-2
A   6-8
A   3-4
B   7-10
B   5-9

期待される出力:ファイル2

A   1-2
A   3-4
A   6-8
B   5-9
B   7-10

答え1

使用sort-kオプション一度に列ごとに並べ替え:

$ sort -k1,1 -k2n input
A   1-2
A   3-4
A   6-8
B   5-9
B   7-10

-k1,1まず、最初の列を基準に並べ替え、次に最初の列を連結-k2nすると、2番目の列に基づいて並べ替えます。これにより、必要な順序で出力を取得できます。最初の列要素が同じ場合にのみ、2番目の列の最初の項目に基づいてソートします。要素がソートされました。

数値で並べ替えると、フィールドが数字ではなくなるまでフィールドがチェックされるため、最初の要素のみを比較できます。

2つのキーが同じであると比較されると、sort最終比較のために行全体が語彙的に比較されます。たとえば、A 1-10vsでは、A 1-2最初のキーは同じ(A文字列)、2番目のキーは同じです(両方とも数値として扱われます)。したがって、vsを1語彙的にsort比較すると、ソート後の後者が大きくなります。 GNU実装には、実行するオプションまたはキーフラグがあります。A 1-10A 1-221sort-VVバージョンソートは、文字列の10進数シーケンスを数値で比較し、数値が大きいため、後でソートされることを除いて、語彙比較sort -k1,1 -k2Vに似ています。A 1-10A 1-2102


1は技術的に-k22番目のフィールドで始まり(空白ではなく空白を空白に最初に変換した後)、行の終わりで終わる部分ですが、数値を形成するための先行部分と見なされるのとn同じフラグがあります。-k2,2n

関連情報