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-10
vsでは、A 1-2
最初のキーは同じ(A
文字列)、2番目のキーは同じです(両方とも数値として扱われます)。したがって、vsを1
語彙的にsort
比較すると、ソート後の後者が大きくなります。 GNU実装には、実行するオプションまたはキーフラグがあります。A 1-10
A 1-2
2
1
sort
-V
V
バージョンソートは、文字列の10進数シーケンスを数値で比較し、数値が大きいため、後でソートされることを除いて、語彙比較sort -k1,1 -k2V
に似ています。A 1-10
A 1-2
10
2
1は技術的に-k2
2番目のフィールドで始まり(空白ではなく空白を空白に最初に変換した後)、行の終わりで終わる部分ですが、数値を形成するための先行部分と見なされるのとn
同じフラグがあります。-k2,2n