GNU/Linux >> Linux の 問題 >  >> Linux

コマンドラインでsortを使用してソートする

スプレッドシートアプリケーションを使用したことがある場合は、行を列の内容で並べ替えることができることをご存知でしょう。たとえば、経費のリストがある場合は、日付、昇順、カテゴリなどで並べ替えることができます。ターミナルの使用に慣れている場合は、テキストデータを並べ替えるためだけに大規模なオフィスアプリケーションを使用する必要はないかもしれません。そしてそれがまさにソートです コマンドはです。

インストール

その他のLinuxリソース

  • Linuxコマンドのチートシート
  • 高度なLinuxコマンドのチートシート
  • 無料のオンラインコース:RHELの技術概要
  • Linuxネットワーキングのチートシート
  • SELinuxチートシート
  • Linuxの一般的なコマンドのチートシート
  • Linuxコンテナとは何ですか?
  • 最新のLinux記事

sortをインストールする必要はありません これは、POSIXシステムに必ず含まれているためです。ほとんどのLinuxシステムでは、並べ替え コマンドは、GNU組織のユーティリティのコレクションにバンドルされています。 BSDやMacなどの他のPOSIXシステムでは、デフォルトのソート コマンドはGNUからのものではないため、一部のオプションは異なる場合があります。この記事では、GNUとBSDの両方の実装について説明します。

行をアルファベット順に並べ替える

並べ替え コマンドは、デフォルトで、ファイルの各行の最初の文字を調べ、アルファベットの昇順で各行を出力します。複数行の2文字が同じ場合は、次の文字と見なされます。例:

 $ cat distro.list 
Slackware
Fedora
Red Hat Enterprise Linux
Ubuntu
Arch
1337
Mint
Mageia
Debian
$ sort distro.list
1337
Arch
Debian
Fedora
Mageia
Mint
Red Hat Enterprise Linux
Slackware
Ubuntu

並べ替えの使用 元のファイルは変更されません。並べ替えはフィルターであるため、並べ替えられた形式でデータを保持する場合は、>のいずれかを使用して出力をリダイレクトする必要があります。 またはティー

 $ sort distro.list | tee distro.sorted 
1337
Arch
Debian
[...]
$ cat distro.sorted
1337
Arch
Debian
[...]
列で並べ替え

複雑なデータセットは、各行の最初の文字以外で並べ替える必要がある場合があります。たとえば、動物とそれぞれの種と属のリストを想像してみてください。各「フィールド」(スプレッドシートの「セル」)は、予測可能な区切り文字で定義されています。これは、スプレッドシートエクスポートの一般的なデータ形式であるため、CSV(カンマ区切り値)ファイル拡張子が存在して、そのようなファイルを識別します(ただし、CSVファイルはカンマ区切りである必要はなく、区切りファイルでCSV拡張機能が有効で使用可能であるため)。次のデータセットの例を検討してください:

 Aptenodytes; forsteri; Miller、JF; 1778; Emperor 
Pygoscelis; papua; Wagler; 1832; Gentoo
Eudyptula; minor; Bonaparte; 1867; Little Blue
Spheniscus; demersus; Brisson;1760;アフリカ
Megadyptes;antipodes; Milne-Edwards; 1880; Yellow-eyed
Eudyptes; chrysocome; Viellot; 1816; Southern Rockhopper
Torvaldis; linux; Ewing、L; 1996; Tux

このサンプルデータセットを前提として、-field-separatorを使用できます。 ( -tを使用します BSDおよびMacの場合(または入力を減らす場合はGNUの場合)、区切り文字をセミコロンに設定するオプション(この例ではコンマの代わりにセミコロンを使用しますが、任意の文字を使用できます)、および-key -k BSDおよびMacの場合、または入力を減らすためのGNUの場合)オプションを使用して、並べ替えるフィールドを定義します。たとえば、各行の2番目のフィールド(0ではなく1から始まる)で並べ替えるには:

 sort --field-separator =";" --key =2 
Megadyptes; antipodes; Milne-Edwards; 1880; Yellow-eyed
Eudyptes; chrysocome; Viellot; 1816; Southern Rockhopper
Spheniscus; demersus; Brisson; 1760; African
Aptenodytes; forsteri; Miller、JF; 1778; Emperor
Torvaldis; linux; Ewing、L; 1996; Tux
Eudyptula; minor; Bonaparte; 1867; Little Blue
Pygoscelis; papua;ワグラー;1832;ジェンツー

読むのは少し難しいですが、Unixはパイプで有名です。 コマンドを作成する方法。を使用できます。 出力を「きれいにする」コマンド。 GNUの使用 :

 $ sort --field-separator =";" \ 
--key =2 penguins.list | \
column --table --separator ";"
Megadyptes antipodes Milne-Edwards 1880 Yellow-eyed
Eudyptes chrysocome Viellot Viellot br sus can
Spheniscus>コウテイペンギン属forsteriミラー、JF 1778皇帝
Torvaldis linuxのユーイング、L 1996タックス
Eudyptulaマイナー・ボナパルト1867リトルブルー
PygoscelisパプアWagler 1832 Gentooの

新しいユーザーには少しわかりにくい(ただし、入力するのは短い)、BSDおよびMacのコマンドオプション:

 $ sort -t ";" \ 
-k2 penguins.list | column -t -s ";"
Megadyptes antipodes Milne-Edwards 1880 Yellow-eyed
Eudyptes chrysocome Viellot Viellot 1816 A fri s ter J 760 P dy can
Spheniscus demersus皇帝
Torvaldis linux Ewing、L 1996 Tux
Eudyptula minor Bonaparte 1867 Little Blue
Pygoscelis papua

キー 定義を2に設定する必要はありません 、 もちろん。既存のフィールドを並べ替えキーとして使用できます。

逆ソート

-reverse を使用すると、並べ替えられたリストの順序を逆にすることができます ( -r 簡潔にするためにBSD、Mac、またはGNUの場合):

 $ sort --reversealphabet.list 
z
y
x
w
[...]

通常のソートの出力をtacにパイプすることで、同じ結果を得ることができます。

月ごとの並べ替え(GNUのみ)

完璧な世界では、誰もがISO 8601標準に従って日付を書きます:年、月、日。これは、一意の日付を指定する論理的な方法であり、コンピューターが理解しやすい方法です。それでも、人間は、かなり任意の名前の月など、日付を識別する他の手段を使用することがよくあります。

幸い、GNUの並べ替え コマンドはこれを考慮し、月の名前で正しく並べ替えることができます。 -month-sortを使用します ( -M )オプション:

 $ cat month.list 
11月
10月
9月
4月
[...]
$ sort--month-sortmonth。リスト
1月
2月
3月
4月
5月
[...]
11月
12月

月は、フルネームまたは名前の一部で識別される場合があります。

人間が読める形式の数値ソート(GNUのみ)

人間とコンピューターの間のもう1つの一般的な混乱点は、数字のグループです。たとえば、人間の脳は「1024」よりも「1KB」を解析する方が簡単で速いため、人間は「1024キロバイト」を「1KB」と書くことがよくあります(数値が大きくなるほど簡単になります)。ただし、コンピュータにとっては、9KBなどの文字列はたとえば1MBよりも大きくなります(9KBはメガバイトのほんの一部ですが)。 GNUソート コマンドは--human-numeric-sortを提供します ( -h )これらの値を正しく解析するのに役立つオプション。

 $ cat size.list 
2M
12MB
1k
9k
900
7000
$ sort --human-numeric-並べ替え
900
7000
1k
9k
2M
12MB

いくつかの矛盾があります。たとえば、16,000バイトは1KBを超えていますが、並べ替え それを認識できない:

 $ cat size0.list 
2M
12MB
16000
1k
$ sort -h size0.list
16000
1k
2M
12MB

論理的には、このコンテキストでは16,000を16KBと書く必要があるため、GNU sort 完全に責任があるわけではありません。数字が一貫していることが確実である限り、-human-numeric-sort コンピューターに優しい方法で人間が読める数字を解析するのに役立ちます。

ランダム化された並べ替え(GNUのみ)

ユーティリティは、本来の目的とは逆のことを行うオプションを提供する場合があります。ある意味で、並べ替えには意味がありません ファイルをランダムに「ソート」する機能を持つコマンド。繰り返しになりますが、コマンドのワークフローにより、便利な機能になります。あなたはできた shufなどの別のコマンドを使用します 、または使用しているコマンドにオプションを追加することもできます。肥大化したものでも独創的なUXデザインでも、GNUソート コマンドは、ファイルを任意にソートする手段を提供します。

任意の並べ替えの最も純粋な形式は、-random-sortです。 または-R オプション( -rと混同しないでください オプション。-reverseの略です。 。

 $ sort --random-sortalphabet.list 
d
m
p
a
[...]

ファイルに対してランダムソートを複数回実行して、毎回異なる結果を得ることができます。

並べ替え

ソートで利用できる機能は他にもたくさんあります GNUおよびBSDコマンドなので、オプションを理解するために時間をかけてください。 並べ替えの柔軟性に驚かれることでしょう 特に、他のUnixユーティリティと組み合わせると可能性があります。


Linux
  1. GNUParallelを使用してLinuxコマンドラインでより多くのことを行う

  2. screenieを使用したコマンドラインでのマルチタスク

  3. Lsコマンドの結果の補足を取得しますか?

  1. Linuxコマンドラインでのデータストリームの操作

  2. Linuxコマンドラインでのパイプの操作

  3. sedを使用してコマンドラインでテキストを操作する

  1. コマンドラインを使用してディレクトリ内のファイルの数を取得するにはどうすればよいですか?

  2. LibreOffice、lprコマンドを使用してコマンドラインから印刷しますか?

  3. コマンドラインから Dropbox ファイルの URL を取得するには?