最初と2番目の列でファイルを並べ替える


13

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

回答:


22

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つのキーが同じを比較する場合、sort最後の手段の比較として全行を字句的に比較します。たとえばA 1-10vs A 1-2では、最初のキーは同じ(A文字列)で、2番目のキーも(両方とも数値として扱われます1)ので、sortレキシカルにA 1-10vs を比較A 1-2し、後者は2after としてソートされ1ます。GNUの実装はsort有する-VオプションまたはV実行する鍵フラグバージョンので、ストリング内の桁の配列を数値的に比較される以外の字句比較に似てソートし、sort -k1,1 -k2VソートすることになるA 1-10A 1-2ため、10数がより大きいほど2


¹技術的に-k2は、2番目のフィールド(非ブランクからブランクへの最初の遷移後)で始まり、行の終わりで終わる行の部分を意味しますが、nフラグ-k2,2nは先頭部分のみと同等です数字を構成するものが考慮されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.