2016-04-07 9 views
0

事前にアドバイスをお願いします。文字列キーでソートしてから整数でソートする(bash)

ファイルをタブ区切りのフィールドでソートしようとしています(下記参照)。重要なフィールドはフィールド1とフィールド2です。

ID(文字列値でソートされます)、次に大きい文字列(数値でソートされた文字列)で始まる位置です。

KI270036.1 5137 5523 -1 
KI270036.1 5215 5636 -1 
**KI270036.1 546  1448 -1** 
KI270036.1 6364 7425 -1 
KI270036.1 8687 9529 -1 
KI270041.1 1957 2343 1 
KI270041.1 3114 3423 1 
KI270041.1 4792 5439 1 
KI270041.1 5703 6308 1 

これは、並べ替えようとしているテーブルの例です。最初のフィールドは必要に応じて順番に並んでいますが、ボールド体のフィールドは私の仕様に従って順不同です。

私が入力したコマンドをした

sort -g -t '  ' -k 1,2 my_file.txt 

がどのように私はIDごとにグループ化されたレコードを達成するために、これを変更することができ、その後、2番目のフィールドで数値的にソートされましたか?

私は、この例で探しています出力は次のとおりです。

**KI270036.1 546  1448 -1** 
KI270036.1 5137 5523 -1 
KI270036.1 5215 5636 -1 
KI270036.1 6364 7425 -1 
KI270036.1 8687 9529 -1 
KI270041.1 1957 2343 1 
KI270041.1 3114 3423 1 
KI270041.1 4792 5439 1 
KI270041.1 5703 6308 1 
+0

を得るでしょう、あなたがフィールド1で始まるカラムとして 'KI270036.1'などでカラムを意味しています星を除去した後

$ sort -k1,1 -k2n file 

フィールド2として「5137」? – dawg

+0

はい、私は 'cut'と' awk'で使用されているコンベンションに行きます – libby

答えて

2

複数のキーを定義することができます。最初のフィールドは固定サイズのフォーマットなので特別なフラグは必要ありません(レキシカルソートは問題ありません)。あなたは「フィールド1とフィールド2」によって

KI270036.1 546  1448 -1 
KI270036.1 5137 5523 -1 
KI270036.1 5215 5636 -1 
KI270036.1 6364 7425 -1 
KI270036.1 8687 9529 -1 
KI270041.1 1957 2343 1 
KI270041.1 3114 3423 1 
KI270041.1 4792 5439 1 
KI270041.1 5703 6308 1 
+0

これは私を助けましたが、 '-k2n'ではなく' -k2g'だったはずです。私は今話すことができません。しかし、それは助けになりました。ありがとう。整数nのための – libby

+0

は良いです。 – karakfa

+0

2番目のフィールドソートで残りの行を考慮する必要がないと仮定して、 '-k2,2n'を実行します。 (これはここでは始まりませんが、 '546'行を複製して3行目の' 2448'行を最初の行にコピーすると、違いがわかります。 –

0

第二の安定ソートでsort 2回通過を行います

$ sort my_file.txt | sort -g -s -k 2 
**KI270036.1 546  1448 -1** 
KI270041.1 1957 2343 1 
KI270041.1 3114 3423 1 
KI270041.1 4792 5439 1 
KI270036.1 5137 5523 -1 
KI270036.1 5215 5636 -1 
KI270041.1 5703 6308 1 
KI270036.1 6364 7425 -1 
KI270036.1 8687 9529 -1 

あるいは、

$ sort -g -s -k 2 my_file.txt | sort -s 
**KI270036.1 546  1448 -1** 
KI270036.1 5137 5523 -1 
KI270036.1 5215 5636 -1 
KI270036.1 6364 7425 -1 
KI270036.1 8687 9529 -1 
KI270041.1 1957 2343 1 
KI270041.1 3114 3423 1 
KI270041.1 4792 5439 1 
KI270041.1 5703 6308 1 

プライマリソートキーに依存します(出力例がなく、あいまいです...)

関連する問題