Linux-admin-sort-command
Linux Admin-sortコマンド
*sort* には、データ型に基づいてソートするためのいくつかの最適化があります。 isコマンドは、すべてのファイルのソートされた連結を標準出力に書き込みます。 ただし、数ギガバイトの大きなファイルに対する複雑なソート操作は、システムのパフォーマンスを低下させる可能性があります。
CPUやメモリの可用性が制限された運用サーバーを実行する場合は、これらの大きなファイルをワークステーションにオフロードして、ピーク営業時間中にソート操作を行うことをお勧めします。
| Switch | Action |
|---|---|
| -b | Ignore leading blank lines |
| -d | Dictionary order, consider only blanks and alphanumeric characters |
| -f | Ignore case, folding lower and upper characters |
| -g | General numeric sort |
| -M | Month sort |
| -h | Human readable numeric sort 1KB, 1MB, 1GB |
| -R | Random sort |
| -m | Merge already sorted files |
以下の表形式のテキストをコピーして、並べ替えの例に従ってください。 各列がタブ文字で区切られていることを確認してください。
| first name | last name | office |
|---|---|---|
| Ted | Daniel | 101 |
| Jenny | Colon | 608 |
| Dana | Maxwell | 602 |
| Marian | Little | 903 |
| Bobbie | Chapman | 403 |
| Nicolas | Singleton | 203 |
| Dale | Barton | 901 |
| Aaron | Dennis | 305 |
| Santos | Andrews | 504 |
| Jacqueline | Neal | 102 |
| Billy | Crawford | 301 |
| Rosa | Summers | 405 |
| Kellie | Curtis | 903 |
| Matt | Davis | 305 |
| Gina | Carr | 902 |
| Francisco | Gilbert | 101 |
| Sidney | Mack | 901 |
| Heidi | Simmons | 204 |
| Cristina | Torres | 206 |
| Sonya | Weaver | 403 |
| Donald | Evans | 403 |
| Gwendolyn | Chambers | 108 |
| Antonia | Lucas | 901 |
| Blanche | Hayes | 603 |
| Carrie | Todd | 201 |
| Terence | Anderson | 501 |
| Joan | Parsons | 102 |
| Rose | Fisher | 304 |
| Malcolm | Matthews | 702 |
最も基本的なデフォルト形式で sort を使用します-
[root@centosLocal centos]# sort ./Documents/names.txt
Aaron Dennis 305
Antonia Lucas 901
Billy Crawford 301
Blanche Hayes 603
Bobbie Chapman 403
Carrie Todd 201
Cristina Torres 206
Dale Barton 901
Dana Maxwell 602
Donald Evans 403
Francisco Gilbert 101
Gina Carr 902
Gwendolyn Chambers 108
Heidi Simmons 204
Jacqueline Neal 102
Jenny Colon 608
Joan Parsons 102
Kellie Curtis 903
Malcolm Matthews 702
Marian Little 903
Matt Davis 305
Nicolas Singleton 203
Rosa Summers 405
Rose Fisher 304
Santos Andrews 504
Sidney Mack 901
Sonya Weaver 403
Ted Daniel 101
Terence Anderson 501
[root@centosLocal centos]#
場合によっては、最初の列以外の別の列でファイルを並べ替えたいことがあります。 -t および -k スイッチを使用して、ソートを他の列に適用できます。
-t : define a file delimiter
-k : key count to sort by (think of this as a column specified from the delimiter.
-n : sort in numeric order
注-いくつかの例では、grepにパイプされたcatを使用しています。 これは、パイピングコマンドの概念を示すためでした。 catをgrepに出力すると、複雑なソートを追加しながら、大きなファイルでシステムの負荷を数百倍に増やすことができます。 これにより、ベテランのLinux管理者はうんざりします。
パイプ文字がどのように機能するかについての良いアイデアが得られたので、この貧弱な慣行は後続の章で回避されます。 sortなどのコマンドでシステムリソースを低く保つための鍵は、それらを効率的に使用することを学ぶことです。
[root@centosLocal centos]# sort -t ' ' -k 3n ./Documents/names.txt
Ted Daniel 101
Francisco Gilbert 101
Jacqueline Neal 102
Joan Parsons 102
Gwendolyn Chambers 108
Carrie Todd 201
Nicolas Singleton 203
Heidi Simmons 204
Cristina Torres 206
Billy Crawford 301
Rose Fisher 304
Aaron Dennis 305
Matt Davis 305
Bobbie Chapman 403
Donald Evans 403
Sonya Weaver 403
Rosa Summers 405
Terence Anderson 501
Santos Andrews 504
Dana Maxwell 602
Blanche Hayes 603
Jenny Colon 608
Malcolm Matthews 702
Antonia Lucas 901
Dale Barton 901
Sidney Mack 901
Gina Carr 902
Kellie Curtis 903
Marian Little 903
[root@centosLocal centos]#
これで、リストがオフィス番号でソートされました。 賢明な読者は、-t *スイッチの後、通常とは異なる何かに気付くでしょう。いくつかのスペースのように見えるもので区切られた単一引用符。 これは実際には、シェルに送信されるリテラルのタブ文字でした。 *control + Tab + v のキーの組み合わせを使用して、リテラルTabをBASHシェルに送信できます。
ほとんどのシェルは、Tabキーをコマンドとして解釈します。 たとえば、BASHの自動補完。 シェルには、リテラルのタブ文字を認識するためのエスケープシーケンスが必要です。 これが、タブがLinuxの区切り文字に最適な選択肢ではない理由の1つです。 一般的に、スペースとタブはシェルをスクリプト化するときに問題を引き起こす可能性があるため、避けることをお勧めします。
names.txtファイルを修正しましょう。
[root@centosLocal centos]# sed -i 's/\t/:/g' ./Documents/names.txt &&
cat ./Documents/names.txt
Ted:Daniel:101
Jenny:Colon:608
Dana:Maxwell:602
Marian:Little:903
Bobbie:Chapman:403
Nicolas:Singleton:203
Dale:Barton:901
Aaron:Dennis:305
Santos:Andrews:504
Jacqueline:Neal:102
Billy:Crawford:301
Rosa:Summers:405
Kellie:Curtis:903:
Matt:Davis:305
Gina:Carr:902
Francisco:Gilbert:101
Sidney:Mack:901
Heidi:Simmons:204
Cristina:Torres:206
Sonya:Weaver:403
Donald:Evans:403
Gwendolyn:Chambers:108
Antonia:Lucas:901
Blanche:Hayes:603
Carrie:Todd:201
Terence:Anderson:501
Joan:Parsons:102
Rose:Fisher:304
Malcolm: Matthews:702
[root@centosLocal centos]#
これで、テキストファイルの操作がはるかに簡単になります。 誰かがそれを別のアプリケーションのために区切られたタブに戻すことを要求する場合(これは一般的です)、私たちはそのタスクを簡単に達成できます-
sed -i 's/:/\t/g' ./Documents/names.txt
一般的なエンドユーザーアプリケーションは、タブを区切り記号として使用するとうまく機能します(会計士は、スプレッドシートで作業している間、データ列を区切るコロンを見たくありません)。 したがって、キャラクターを前後に変換することを学ぶことは良い習慣です。頻繁に発生します。
注-Officeは、Windows上で実行されるグラフィカルユーザーインターフェイスを備えたワードプロセッサとスプレッドシートを使用します。 そのため、Linux管理者は、変換アクションを完了してエンドオフィスユーザーに対応するのが得意です(ほとんどの場合、上司はエンドユーザーになります)。
*sed* と呼ばれるコマンドが導入されました。 sedはストリームエディターであり、テキストおよびファイルのストリームを操作するための非対話型テキストエディターとして使用できます。 sedについては後で詳しく説明します。 ただし、現時点では、sedを使用して、テキストファイルを変更する際にいくつかのフィルターコマンドをパイプする必要がありません。 したがって、手元のツールを最も効率的に使用できます。
Bashシェル演算子_ && _も導入しました。 _ && _は、最初のコマンドが「0」の成功ステータスで完了した場合にのみ、2番目のコマンドを実行します。
[root@centosLocal centos]# ls/noDir && echo "You cannot see me"
ls: cannot access/noDir: No such file or directory
[root@centosLocal centos]# ls/noDir ; echo "You cannot see me"
ls: cannot access/noDir: No such file or directory
You cannot see me
[root@centosLocal centos]# ls/noDir ; echo "You cannot see me"
上記のコードでは、&&と;?の違いに注意してください。 最初のコマンドは、最初のコマンドが正常に完了したときにのみ2番目のコマンドを実行します。単にコマンドを連鎖させます。 これについては、シェルコマンドのスクリプトを作成するときに説明します。