web-dev-qa-db-ja.com

列の並べ替えコマンドbashに基づいてタブ区切りファイルを並べ替える

このファイルを4番目の列に基づいてソートしようとしています。 4列目の値に基づいてファイルを並べ替えたい。

ファイル:

2   1:103496792:A   0   103496792
3   1:103544434:A   0   103544434
4   1:103548497:A   0   103548497
1   1:10363487:T    0   10363487

このように並べ替えたい:

1   1:10363487:T    0   10363487
2   1:103496792:A   0   103496792
3   1:103544434:A   0   103544434
4   1:103548497:A   0   103548497

私はこのコマンドを試しました:

sort -t$'\t' -k1,1 -k2,2 -k3,3 -k 4,4 <filename>

しかし、無効な変数名エラーが発生します。誰かがこれで私を助けることができますか?

19
Vignesh

4列目でソートするには、-k 4,4セレクターのみを使用します。

sort -t $'\t' -k 4,4 <filename>

数値をより自然にソートする-Vも必要な場合があります。たとえば、1 2 10(辞書式順序)ではなく1 10 2を生成します。

sort -t $'\t' -k 4,4 -V <filename>

$'\t'に関するエラーが発生する場合は、シェルがbashであることを確認してください。おそらく、スクリプトの上部に#!/bin/bashがありませんか?

47
John Kugelman

間違いがあると思います$コマンドで。

試してください:

sort -t\t -nk4
4
Phylogenesis