Bash でファイルの 2 列目に基づいてデータを並べ替える
この記事では、bash でファイルの 2 番目の列に基づいてデータを並べ替える方法について説明します。
Bash の sort
コマンドの概要
ファイルは、特定の順序でレコードを配置する sort
コマンドを使用してソートされます。 デフォルトでは、sort
コマンドは、ASCII
データが含まれていると仮定してファイルをソートします。
数値ソートは、sort
コマンドで利用できるもう 1つのオプションです。 sort
コマンドには次の機能が含まれています。
- 数字で始まる行は、文字で始まる行よりも前に表示されます。
- アルファベット順で後の文字で始まる行は、前の文字で始まる行の後に続きます。
- 大文字で始まる行は、同じ小文字で始まる行よりも前に表示されます。
filename.csv
という名前のデータ ファイルを作成するとします。 cat
コマンドを使用して bash でそのファイルを開きます。
Bash でファイルを開く構文:
$ cat filename.csv
大文字と小文字が混在するファイルを並べ替える:
大文字と小文字が混在するファイルでは、大文字が最初にソートされ、次に小文字がソートされます。
並べ替えには、次のような多数の選択肢があります。
-
-k
- このオプションは、指定された列に基づいてデータをソートするのに役立ちます。 たとえば、引数-k5
は、各行の 5 番目の文字ではなく、各行の 5 番目のフィールドからソートを開始します (ここでの列はカンマ区切りのフィールドとして定義されていることに注意してください)。 -
-n
- このオプションは、数値のsort
を指定します。これは、列をテキストではなく数字の行として読み取る必要があることを意味します。 -
-r
--r
オプションでソート順を逆にします。 別の書き方は-reverse
. -
-i
- このオプションは、印刷できない文字を無視します。 別の書き方は-ignore-nonprinting
です。 -
-b
- このオプションは、行数が空白を使用して計算されるため、先頭の空白を考慮しません。 別の書き方はignore-leading-blanks
です。 -
-f
- このオプションは、大文字の使用を無視します,A==a
. 別の書き方はignore-case
です。 このオプションにより、前処理でスペース以外の演算子が使用されます:-t [新しいセパレーター]
。別の書き方は
-field-separator
です。
Bash でファイルの 2 列目に基づいてデータを並べ替える
-k
オプションを使用すると、sort
により、列ごとにファイルを sort
できます。 複数の列を持つファイルを作成することから始めましょう。 並べ替えでは、各列を区切るために 1つのスペースが使用されます。
たとえば、2 番目の列で -k 2
を使用して sort
します。 filename.csv
という名前のファイルが既に作成されています。 そのファイルで利用可能なデータを以下に示します。
Bonie,22
Julie,23
Henry,15
Flamingo,34
Peter,11
cat
コマンドを使用して、並べ替える前にファイル内のアイテムを表示します。
$ cat filename.csv
出力:
Bonie,22
Julie,23
Henry,15
Flamingo,34
Peter,11
Bash でファイルの 2 番目の列に基づいてデータを並べ替える構文:
sort -k2 -n filename.csv
2 番目の列を並べ替えた後の出力:
Bonie,22
Flamingo,34
Henry,15
Julie,23
Peter,11