2016-11-22 9 views
1

私はカボチャの大きさでソートしようとしているpumpkinsizesの.txtファイルがあります:UNIX「並べ替え」コマンド

name |size 
========== 
Joe |5 
Mary |10 
Bill |2 
Jill |1 
Adam |20 
Mar |5 
Roe |10 
Mir |3 
Foo |9 
Bar |12 
Baz |0 

は現在、私は仕事にsortを得ることに大きな困難を抱えているが正しく。誰も私がリストの構造を変更せずにカボチャのサイズで私のリストを並べ替えることができますか?

答えて

3

表の見出しには、特別な配慮が必要です。表の見出しは、「並べ替える」ことでランダムな線に移動するためです。したがって、我々は2つのステップのプロセスを使用します: a)テーブル見出しを出力します。 B)キーポイントオプション-kある

$ awk 'NR<=2' in; awk 'NR>2' in | sort -t '|' -nr -k 2 
name |size 
========== 
Adam |20 
Bar |12 
Roe |10 
Mary |10 
Foo |9 
Mar |5 
Joe |5 
Mir |3 
Bill |2 
Jill |1 
Baz |0 
3

)フィールド2(-kから始まる、フィールドセパレータ|(-t)と、(-r) 順序を逆に、残りの数値(-n)をソートsortです。 man sortを使用すると、その動作を確認できます。あなたの問題の解決策は次のとおりです。

sed -n '3,$p' YOUR_FILENAME| sort -hrt '|' -k 2 
1

あなたは単にsedコマンドを使用して

name |size 
========== 

を削除することができます。そして残っているものは、sortコマンドでソートすることができます。ここ

sed '1,2d' txt | sort -t "|" -k 2 -n

sed '1,2d'は、最初の2行を削除します。

次に、sortは、というオプションを使用して、文字'|'のデータをトークン化します。

2番目のトークンとなるサイズに基づいてソートするので、-k 2オプションのトークン「サイズ」はsortで指定できます。

最後に、「サイズ」を数字と考えるので、-nsortオプションでこれを指定できます。

+0

これは降順ではなく昇順に並べ替えます。 – Jens

+0

@Jens:OPは並べ替え順序について言及していないので、デフォルトの昇順として保持されます。しかし '-r'(逆順または降順)オプションは' sort'コマンドで提供することができます。 – sameerkn

1

あなたはシェルでこれを行うことができます:

{ read; echo "$REPLY"; read; echo "$REPLY"; sort -t'|' -k2n; } < pumpkins.txt 

最初の2つのヘッダー行を読み取り、印刷し、その後、残りの部分を並べ替えます。

関連する問題