Unixをアルファベット順に並べてから数字順に並べ替えると、期待どおりに機能しませんでした。

Unixをアルファベット順に並べてから数字順に並べ替えると、期待どおりに機能しませんでした。

重複した質問で申し訳ありません。ここやドキュメントに希望の答えが見つかりません。

次のファイルがあります。

chr2_oligo1234  700 750
chr2_oligo1236  750 800
chr1_oligo1 50  100
chr1_oligo256   150 200
chr1_oligo6 3500    3550
chr4_oligo95    50  100
chr5_oligo1 50  100
chr4_oligo4 150 200

希望の出力は次のとおりです。

chr1_oligo1 50  100
chr1_oligo256   150 200
chr1_oligo6 3500    3550
chr2_oligo1234  700 750
chr2_oligo1236  750 800
chr4_oligo95    50  100
chr4_oligo4 150 200
chr5_oligo1 50  100

先頭のパターン(例:chr#_oligo#)はchr#にのみ関連しています。つまり、すべてのchr1が最初に来て、次にchr2、次にchr3などが来る必要がありますが、これらの部分文字列を次のようにグループごとに数字でソートしたいと思います。希望の出力は次のとおりです。上記のように。だから、各データの塊を最初の列に基づいてアルファベット順にソートし、その順序(chr1-> chrN)を維持し、各データの塊を数値順にソートする方法を知りたいです。

私の表現が質問に合わないか、繰り返しであれば謝罪します。努力する

sort -k1,1 -nk2

数値では正しくソートされますが、最初のソートはそのまま残りません(最初の列を混在させ、次のようにすべての行を列2と3と一緒に配置します。)

50   100

私はMac OS Xを使用しています。

編集:私が探しているものをさらに表示するために、最初の列のいくつかの例を変更したいと思います。 gsort -Vは、最初の列の名前が数値順になっているとうまく機能しますが、私のデータセットでは常にそうではありません。

基本的に、各サブグループ(この場合はchr1、chr2など)を列2に基づいて繰り返しソートしたいと思います。各コマンドをgrepingしてから列2で並べ替えると、これを簡単に実行できることがわかりますが、sortまたは他のunixコマンドがそれを自分で実行できるかどうか疑問に思います。

ベストアンサー1

sort -k1,1 -nk2と同じsort -k1,1 -n -k2、同じsort -n -k1,1 -k2、同じ数値ソートはすべてのキーに対してグローバルに有効になります。

2番目のキーを数字でのみソートするには、nそのソートキーの説明に次のように追加する必要があります。

sort -k1,1 -k2n

または:

sort -k1,1 -k2,2n

使用は、デフォルトのnフィールド区切り文字を使用するのと2同じです2,2。は2番目のフィールドで始まる行の一部ですが、数値として解釈されると、2番目のフィールドのみ()2と同じです。2,2

ここでは、次の数字を数値順に並べ替え、最初のフィールドchrの残りの部分をアルファベット順に、2番目のフィールドを数字順に並べ替えることもできます。

sort -k1.4n -k1,1 -k2n

おすすめ記事