CodeGym /コース /Docker SELF /ファイルのソートとフィルタリング: コマンド `sort`、`uniq`、`cut`

ファイルのソートとフィルタリング: コマンド `sort`、`uniq`、`cut`

Docker SELF
レベル 8 , レッスン 3
使用可能

ファイルのソートとフィルタリング: コマンド sortuniqcut

1. コマンドsort

sortコマンドはテキストファイル内の行をソートするためのもの。通常のテキストからCSVまで、任意の形式のテキストで機能する。デフォルトではアルファベット順に行を並び替えるけど、オプションを使えばいろいろなことができるよ。

基本構文

sort [オプション] ファイル

簡単な例

例えば次のような内容のnames.txtファイルがあるとするね:

Charlie
Alice
Bob
David

これをアルファベット順にソートするにはこうするよ:

sort names.txt

結果はこんな感じ:

Alice
Bob
Charlie
David

sortの主なオプション

逆順ソート

行を降順にソートしたい場合は、-rオプションを使う:

sort -r names.txt

結果は:

David
Charlie
Bob
Alice

数値ソート

数字の場合、アルファベット順では正しい順序にならないことがある。例えば、次の内容のnumbers.txtファイル:

10
2
5
1

アルファベット順ではこうなる:

1
10
2
5

でも、-nオプション(数値ソート)を使うと:

sort -n numbers.txt

正しい結果が得られる:

1
2
5
10

スペースへの対応

時々、行の先頭や末尾にスペースが含まれている場合がある。sortが混乱しないようにするには、-bオプションを使う:

sort -b 汚い_ファイル.txt

ウェブサイト訪問ログvisits.logがあるとする:

user2 15
user1 5
user3 30
user4 20

訪問数(2番目の列)でユーザーをソートしたい場合はこうするよ:

sort -k2 -n visits.log

ここで-k2は「2列目をソートに使う」という意味だよ。結果は:

user1 5
user2 15
user4 20
user3 30

2. コマンド uniq

コマンド uniq はファイル内の重複する行を取り除く。ただし注意点として、これは連続する重複にしか対応しない。つまり、同じ行がファイルの異なる部分に存在する場合、最初にソートが必要。

基本構文

uniq [オプション] ファイル

シンプルな例

例えば、ファイル colors.txt がある場合:

red
green
green
blue
blue
blue
red

そのまま uniq を使うと:

uniq colors.txt

結果はこうなる:

red
green
blue
red

不可避な重複の削除

最初にファイルをソートする:

sort colors.txt | uniq

結果:

blue
green
red

uniq の主要オプション

重複回数のカウント

各行が何回出現したかを知りたい場合は、オプション -c を使用:

sort colors.txt | uniq -c

結果:

   3 blue
   2 green
   2 red

ファイル access.log にIPアドレスのリストがある場合:

192.168.0.1
192.168.0.2
192.168.0.1
192.168.0.3
192.168.0.1

一番頻繁に登場するIPを知りたい場合:

sort access.log | uniq -c | sort -rn

結果:

   3 192.168.0.1
   1 192.168.0.2
   1 192.168.0.3

3. コマンド cut

コマンド cutは、行から特定の部分を抽出するために使用する。例えば、CSVファイル内の特定の列や文字の範囲など。

基本構文

cut [オプション] ファイル

簡単な例

ファイル data.csv:

Alice,25,Developer
Bob,30,Designer
Charlie,22,Manager

名前だけ抽出する(最初の列):

cut -d',' -f1 data.csv

結果:

Alice
Bob
Charlie

どこで:

  • -d',' — 区切り文字(カンマ)。
  • -f1 — 抽出するフィールド(列)。

cutの主要なオプション

文字範囲の選択

ファイル data.csvが固定幅の列で構成されている場合:

Alice      25 Developer
Bob        30 Designer
Charlie    22 Manager

年齢だけ抽出する(12文字目から14文字目):

cut -c12-14 data.csv

結果:

25
30
22

複数のフィールドの選択

ファイル log.csvの場合:

2023-01-01,INFO,Server started
2023-01-02,ERROR,Connection failed
2023-01-03,INFO,Server stopped

日付とログレベルだけを選択(フィールド1と2):

cut -d',' -f1,2 log.csv

結果:

2023-01-01,INFO
2023-01-02,ERROR
2023-01-03,INFO

4. 実践例: sortuniqcutの組み合わせ

次のようなデータを持つログファイルを使います:

user1,192.168.0.1
user2,192.168.0.2
user1,192.168.0.1
user3,192.168.0.3
user2,192.168.0.2
  1. IPアドレスを抽出します:
cut -d',' -f2 log.txt
  1. 重複を削除し、カウントします:
cut -d',' -f2 log.txt | sort | uniq -c
  1. 出現回数でソートします:
cut -d',' -f2 log.txt | sort | uniq -c | sort -rn

結果:

2 192.168.0.2
2 192.168.0.1
1 192.168.0.3
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION