
10 awhdk;
14 hjoeow;
2 kdkld;
4 jkjdksl
これを列 1 (つまりカウント) に基づいて並べ替えるにはどうすればよいでしょうか?
次のような出力を得たいです:
14 hjoeow;10 awhdk;4 jkjdksl;2 kdkld
最初の列をソートして両方の列を印刷する必要があります。
答え1
-k
入力行のどこでソート キーが開始および終了するかを指定するために使用できます。
オプションを使用する-n
か、n
ソート キー仕様に追加して、デフォルトの字句ソートではなく数値ソートをトリガーします。また、-r
ソートを逆にします。
ここで、数値ソートの場合、ソート キーを sort コマンドに制限する必要はありません。制限する場合は、次の操作を行います。
sort -rn file
行全体を数値として扱います。14 hjoeow;
たとえば、行は14
数値として認識されます。
次のようにすることができます:
sort -bk 1,1rn file
最初のフィールドのみで並べ替えますが、違いはありません。
行を結合するコマンドはオプションですpaste
。-s
区切り文字は . で指定できます-d
。\0
これは区切り文字の特別な値で、間に何も挟まずに結合するしたがって、期待される出力を得るには、次のようにします。
sort -rn file | paste -sd '\0' -
POSIXではpaste
ファイル名を渡す必要があります。-
これも特別な値であり、標準入力paste
実装によっては省略できます。