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. 実践例: sort、uniq、cutの組み合わせ
次のようなデータを持つログファイルを使います:
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
- IPアドレスを抽出します:
cut -d',' -f2 log.txt
- 重複を削除し、カウントします:
cut -d',' -f2 log.txt | sort | uniq -c
- 出現回数でソートします:
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
GO TO FULL VERSION