shellソート、強力なsortとawk


「ソート」はどの言語でも最も基礎的な機能であり、よく見られるソート対象は「ファイル」と「配列」であり、ソートモードは単列でソートすることもできるし、複数列で組み合わせてソートすることもできる.ソート方式には昇順、降順があり、ソートのアルゴリズムはもっと多くなり、よく見られるのは辞書順、配列サイズ比較などである.以下では、「ソート対象」、「ソートモード」、「ソート方式」、「ソートアルゴリズム」の5つの面から、shellがどのように実現されているかを逐一分析する.
一.sortを用いてファイルと配列をそれぞれソートする
1.sort [ ]を使用すると、ファイルを動作単位でソートできます.sortソート後は元のファイルを変更するのではなく、ソート結果を「標準出力」に出力します.sort -o [ ] [ ]またはsort [ ] > [ ]を使用して、ソート結果を指定したファイルに保存できます.
$cat test
aa
cc
bb

$sort test
aa
bb
cc

注:sortソート後は元のファイルは変更されず、ソート結果を「標準出力」に出力します.sort -o [ ] [ ]またはsort [ ] > [ ]を使用して、ソート結果を指定したファイルに保存できます.
2.sortコマンドを使用して配列をソートするのは少し面倒です.sortコマンドのデフォルトのソート対象はテキストファイルであり、動作単位でソートされるため、ソートする前に配列を動作単位の入力ストリームに変換し、チャネルコマンドを介してsortに渡す必要があります.
sort_arr.sh

#!/bin/sh
arr=(aa cc bb)
echo ${
     arr[@]} | tr ' ' '
'
| sort -o sort_result cat sort_result
$./sort_arr.sh
aa
bb
cc

二.列の並べ替えを指定する
1.列区切り文字
  列のソートを指定するには、各行を複数の列に分割することを前提とし、sortのデフォルトの列区切り記号はスペースであり、列分割記号をカスタマイズする必要がある場合はsort -t ' 'を使用します.
(1)デフォルトの区切り文字
$cat test_multi_column_empty
1 b
3 a
2 c

#        
$sort -k 2 test_multi_column_empty
3 a
1 b
2 c

(2)カスタム区切り文字
$cat test_multi_column_comma
1,b
3,a
2,c

#        
$sort -t ',' -k 2 test_multi_column_empty
3,a
1,b
2,c

2.列ソートの指定
  sortのデフォルトは、最初の列でソートされます.列のソートを指定する必要がある場合は、sort -k 1[ ] -k 2[ ]を使用します.
1.第2列昇順、第3列降順
$cat test_goods
g1,400,2000
g3,300,1000
g2,200,3000
g4,200,5000
g5,200,1000

$sort -t ',' -k2,2 -k3r test_goods
g4,200,5000
g2,200,3000
g5,200,1000
g3,300,1000
g1,400,2000

-kパラメータの詳細な構文は、列1.文字1[修飾子]、列2.文字2[修飾子]です.
三.昇順と降順
sortのデフォルトは昇順でソートされ、降順でソートする必要がある場合はsort -rを使用できます.
$sort -r test
cc
bb
aa

四.数値サイズ順&文字順
 sortはデフォルトで文字列ソートを使用します.文字列ソートアルゴリズムは、先頭文字から順にASCIIコード値で比較し、最後に昇順で出力します.また、ソートアルゴリズムを変更するには、次のいくつかのオプションがあります.
  • -n:数値型でソート
  • -f:小文字を大文字と見なす