2番目の列によるLinuxシェルの並べ替えファイル?


回答:


152

これがUNIXの場合:

sort -k 2 file.txt

複数の-kフラグを使用して、複数の列でソートできます。たとえば、姓で分類し、次にタイブレーカーとして名で並べ替えるには、次のようにします。

sort -k 2,2 -k 1,1 file.txt

「man sort」の関連オプション:

-k、-key = POS1 [、POS2]

POS1でキーを開始し、POS2で終了します(原点1)

POSはF [.C] [OPTS]で、Fはフィールド番号、Cはフィールド内の文字位置です。OPTSは、1つ以上の1文字の順序付けオプションで、そのキーのグローバル順序付けオプションをオーバーライドします。キーを指定しない場合は、行全体をキーとして使用します。

-t、-field-separator = SEP

非空白から空白への遷移の代わりにSEPを使用する


2
--field-separator=','「Billy Bob」などの「名」の値にデータ入力演算子のタイプを入力する可能性がある場合は、少し注意して使用してください...データを守らないと、スペースが簡単にデータに入りますが、カンマは比較的ありそうもない。
Tony Delroy、2010年

1
「Smith、Jr.」のように、これらのフィールドにコンマが使用される可能性が非常に高いです。または「マクダウェル、シニア」または「Dr. John」または「New York、NY」
jbnunn

2
列が視覚的に配置されている場合、つまり各フィールド間に一定でない数のスペースがある場合は、-bオプションを使用する必要があることに注意してください。これは、sort並べ替える文字列が列の最初の文字からではなく、カンマの直後から始まることを実際に考慮しているためです。また、LC_ALL=C単純なASCIIファイルでも発生する可能性があるロケールによる副作用を回避するために、コマンドの前にを付ける必要がある場合があります。
calandoa

@calandoa -b--ignore-leading-blanks)の部分をありがとう。ビットを明確にする:echo -e 'aa<SPACE>a\na<SPACE><SPACE>b' | sort -k2与えるa<SPACE><SPACE>b(2番目の列は最初の後に開始する最初のnon-blank to blank transition、および<SPACE><SPACE>b前にある<SPACE>a)が、と-bそれが与えるaa<SPACE>a予想通り(a前にありますb)。
Kirill Bulygin 2017

7

2番目のフィールドのみでソートするには(したがって、2番目のフィールドが一致する場合、他のフィールドではソートせずに、一致する行は元の順序のままになります):

sort -k 2,2 -s orig_file > sorted_file

3

FWIW、これは、どのプロセスが最も仮想メモリを使用しているかを示すためのソート方法です。

memstat | sort -k 1 -t':' -g -r | less

並べ替えオプションは最初の列に設定されます。列の区切り文字として:数値による並べ替え、逆の並べ替えを使用します。


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