2016-04-17 12 views
0

ファイルの2番目の列を取得し、最初の10個の結果を得て英数字順にソートしようとしていますが、動作しないようです。パイプ演算子の関数を正しく作れない - Linux

cut -f2 file.txt | head -10 | sort -d 

私はこの出力を得る:

NM_000242 
NM_000525 
NM_001005850 
NM_001136557 
NM_001204426 
NM_001204836 
NM_001271762 
NM_001287216 
NM_006952 
NM_007253 

私は最初のファイルをソートし、ソートされたファイルの最初の10行を取得する場合、それは

cut -f2 refGene.txt | sort -d | head -10 

に動作します私はこの出力を得る:

NM_000014 
NM_000015 
NM_000016 
NM_000017 
NM_000018 
NM_000019 
NM_000020 
NM_000021 
NM_000022 
NM_000023 

私はそうしたくありませんファイルをソートしてソートした結果を取得するには、まず最初の10行を取得してから、アルファベット順にソートします。私はここで何を欠場したのですか? ありがとう

答えて

1

まあ、正常に動作します。NM_000525はNM_001005850より前であり、後はNM_00695より前です。

しかし、あなたは数値(_後)第二部をソートする必要がある場合は、あなたが行うことができます。

cut -f2 file.txt | head -10 | sort -t_ -k1,1 | sort -s -t_ -k2 -n 
  • -sは形式があると仮定すると、

安定ソートでありますファイル全体で同じです(2文字_数字)

編集:さらに短いバージョン:

cut -f2 file.txt | head -10 | sort -t_ -k1,1 -k2n 

説明:ソートアルファベット最初のフィールドから(ソートするフィールドの選択のための)フィールドのセパレータとして

  • -t_使用_
  • -k1,1,1せず、それはまた、第2のフィールドを並べ替えることになります)
  • -k2n第2フィールドで数値的にソート

最初に最初のフィールド(英数字ソートを使用)でソートし、次に2番目のフィールドを使用します(数値を使用して文字列を数値に変換してソートします)

関連する問題