
重複した質問で申し訳ありません。ここやドキュメントに希望の答えが見つかりません。
次のファイルがあります。
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
答え2
最初のフィールドではアルファベット順に並べ替え、2番目のフィールドでは数値順に並べ替えます(出力では、--chr4_oligo95はch4_oligo4の前にあります)。
sort -k1,1 -k2n,2n file
chr1_oligo1 50 100
chr1_oligo256 150 200
chr1_oligo6 3500 3550
chr2_oligo1234 700 750
chr2_oligo1236 750 800
chr4_oligo4 150 200
chr4_oligo95 50 100
chr5_oligo1 50 100