Linux-admin-sort-command

提供:Dev Guides
移動先:案内検索

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番目のコマンドを実行します。単にコマンドを連鎖させます。 これについては、シェルコマンドのスクリプトを作成するときに説明します。